<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      題解:luogu_P13696 「CyOI」出包魔法師

      非常好的一道數(shù)學題。

      原題鏈接。

      題目分析

      我們要意識到的一點是,題目中要求的最優(yōu)策略,實際上是一個固定的報數(shù)的序列,即對于每一個數(shù)字 \(i\),你要報 \(a_i\) 次這個數(shù)字,并要使得能拿走 \(k\) 張卡牌的概率最大。

      那么最終的答案就是

      \[\prod_{i = 1}^m \binom{l_i}{a_i} \]

      并且滿足 \(\sum_{i = 1}^n a_i = k\)

      初始時,每個 \(a_i\) 都為 \(0\),我們將 \(a_i\)\(1\) 對答案的貢獻相當于乘上了 \(\dfrac{l_i - a_i}{a_i + 1}\)(由 \(\dbinom{l_i}{a_i}\) 變?yōu)?\(\dbinom{l_i}{a_i + 1}\))。

      這時就已經(jīng)有一個貪心的思路了,每次選擇一個 \(\dfrac{l_i - a_i}{a_i + 1}\) 最大的數(shù)字 \(i\),將其 \(a_i\)\(1\)??梢杂靡粋€堆來維護。復雜度 \(O(k \log m)\)

      優(yōu)化

      我們發(fā)現(xiàn)如果將 \(l_i\) 從小到大排序,越靠后的數(shù)選的一定越多(有點廢話)。我們二分 \(l_m\) 選了 \(x\) 個,對于 \(a_i\),我們想讓它的貢獻盡可能的大。那么就是

      \[\dfrac{l_i - (a_i - 1)}{a_i} \ge \dfrac{l_m - (x - 1)}{x} \]

      解得 \(a_i \le \dfrac{(l_i + 1)x}{l_m + 1}\)。說明 \(a_i\)\(x\) 增大而增大,通過 \(\sum a_i\)\(k\) 的大小關系調(diào)整二分。

      最后有可能會沒選滿 \(k\),這時一定滿足 \(m - k - 1 \le \sum a_i \le k\),此時再使用一個堆來貪心地維護就可以了。

      加上線性預處理階乘及其逆元,時間復雜度 \(O(\max(l_i) + m \log \max(l_i))\)。

      Code

      #include <bits/stdc++.h>
      using namespace std;
      
      #define int long long
      
      constexpr int N = 1e6 + 9;
      constexpr int V = 1e7 + 9;
      constexpr int mod = 998244353;
      int fac[V], ifac[V];
      int l[N], a[N];
      int m, k;
      int ans = 1ll;
      
      struct Node{
      	int l, a, id;
      	friend bool operator < (Node x, Node y){return (x.l - x.a) * (y.a + 1) < (y.l - y.a) * (x.a + 1);}
      };
      priority_queue<Node>q;
      
      int fp(int a, int n){
      	int res = 1ll;
      	while(n){
      		if(n & 1) res = res * a % mod;
      		a = a * a % mod;
      		n >>= 1ll;
      	}
      	return res % mod;
      }
      
      int C(int n, int m){return fac[n] * ifac[m] % mod * ifac[n - m] % mod;}
      
      bool check(int x){
      	int res = 0;
      	for(int i = 1; i <= m; i++) res += (l[i] + 1) * x / (l[m] + 1);
      	return res <= k;
      }
      
      void init(){
      	fac[0] = 1ll;
      	for(int i = 1; i < V; i++) fac[i] = 1ll * fac[i - 1] * i % mod;
      	ifac[V - 1] = fp(fac[V - 1], mod - 2); ifac[0] = 1ll;
      	for(int i = V - 2; i >= 1; i--) ifac[i] = 1ll * ifac[i + 1] * (i + 1) % mod;
      }
      
      signed main(){
      	init();
      	cin >> m >> k;
      	for(int i = 1; i <= m; i++) cin >> l[i];
      	sort(l + 1, l + 1 + m);
      
      	int L = 1, R = l[m], p;
      	while(L <= R){
      		int mid = (L + R) >> 1;
      		if(check(mid)){
      			L = mid + 1;
      			p = mid;
      		}
      		else R = mid - 1;
      	}
      	for(int i = 1; i <= m; i++){
      		a[i] = (l[i] + 1) * p / (l[m] + 1);
      		k -= a[i];
      		if(l[i] > a[i]) q.push((Node){l[i], a[i], i});
      	}
      	while(k--){
      		int i = q.top().id; q.pop();
      		a[i]++;
      		if(l[i] > a[i]) q.push((Node){l[i], a[i], i});
      	}
      
      	for(int i = 1; i <= m; i++){
      		ans = ans * C(l[i], a[i]) % mod;
      	}
      	cout << ans % mod;
      	return 0;
      }
      
      
      posted @ 2025-08-19 20:51  dairuize  閱讀(17)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 久久人人97超碰人人澡爱香蕉| 国产精品十八禁一区二区 | 国产高清一区二区不卡| 国产91精品调教在线播放| 国产肥臀视频一区二区三区| 国产精品亚洲mnbav网站| 激情一区二区三区成人文| 亚洲天堂一区二区三区三州| 亚洲人成网站在线无码| 69天堂人成无码免费视频 | 国产蜜臀一区二区在线播放| 亚洲区色欧美另类图片| 乱女乱妇熟女熟妇综合网| 色九月亚洲综合网| 亚洲国产另类久久久精品网站| 四虎影院176| 色综合天天综合天天综 | 台安县| 激情五月开心婷婷深爱| 国产视频一区二区三区麻豆 | 国产高清在线精品一区APP| 国产成人a在线观看视频| 精品国产AV无码一区二区三区| 少妇爽到呻吟的视频| 亚洲人妻精品一区二区| 亚洲精品一二三四区| 久青草国产在视频在线观看| 日本韩国日韩少妇熟女少妇| 日韩精品亚洲专区在线播放| 国产精品区视频中文字幕| 好紧好滑好湿好爽免费视频| 浴室人妻的情欲hd三级国产| 老司机精品成人无码AV| 亚洲人成网网址在线看| 躁躁躁日日躁| 欧美黑吊大战白妞| 亚洲自在精品网久久一区| h无码精品3d动漫在线观看| 蜜桃av多人一区二区三区| 国产亚洲精品AA片在线播放天 | 久久国产免费观看精品3|