日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

2021牛客暑期多校训练营4 G-Product(组合意义+容斥原理)

發布時間:2023/12/3 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2021牛客暑期多校训练营4 G-Product(组合意义+容斥原理) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

G-Product

Spy_Savior題解
Ultraman-Ace題解
組合意義+容斥原理
轉化后題目關鍵要求D+nkD+nkD+nk個小球放在nnn個盒子中,每個盒子至少有k個小球的方案數。

題目的等價式子為
∑∑i=1nai=D+nk[ai≥k]D!∏i=1nai!\sum_{\sum_{i=1}^na_i=D+nk[a_i\ge k]}\frac{D!}{\prod_{i=1}^na_i!} i=1n?ai?=D+nk[ai?k]?i=1n?ai?!D!?
如果沒有至少有k個小球的限制,那么根據組合意義
∑∑i=1nai=D+nk[ai≥0](D+nk)!∏i=1nai!=nD+nk\sum_{\sum_{i=1}^{n}a_i=D+nk[a_i\ge 0]}\frac{(D+nk)!}{\prod_{i=1}^{n}a_i!}=n^{D+nk} i=1n?ai?=D+nk[ai?0]?i=1n?ai?!(D+nk)!?=nD+nk

可得
∑∑i=1nai=D+nk[ai≥0]D!∏i=1nai!=D!(D+nk)!nD+nk\sum_{\sum_{i=1}^na_i=D+nk[a_i\ge 0]}\frac{D!}{\prod_{i=1}^na_i!}=\frac{D!}{(D+nk)!}n^{D+nk} i=1n?ai?=D+nk[ai?0]?i=1n?ai?!D!?=(D+nk)!D!?nD+nk

關鍵是有了限制,考慮容斥原理

dpi,j\text{dp}_{i,j}dpi,j?表示jjj個球分到iii個非法組的方案數,枚舉最后一個非法組的球數jjj個求的分配情況即可

dpi,j=∑t=0k?1dpi?1,j?t(jt)\text{dp}_{i,j}=\sum_{t=0}^{k-1}\text{dp}_{i-1,j-t}\binom{j}{t} dpi,j?=t=0k?1?dpi?1,j?t?(tj?)


容斥原理,設時間AiA_iAi?表示第iii個組不合法,那么
∣A1ˉ?A2ˉ???Anˉ∣=∑i=0n{(?1)n∑j,k∣Aj∣???∣Ak∣}|\bar{A_1}\bigcap\bar{A_2}\bigcap\dots \bigcap\bar {A_n}|=\sum_{i=0}^{n}\{(-1)^n\sum_{j,k}|A_j| \bigcup\dots\bigcup|A_k|\}A1?ˉ??A2?ˉ????An?ˉ?=i=0n?{(?1)nj,k?Aj????Ak?}

而對于其他組就沒有限制條件,可以帶入上述公式可以直接求得。

#include<bits/stdc++.h> using namespace std; using ll=long long; template <class T=int> T rd() {T res=0;T fg=1;char ch=getchar();while(!isdigit(ch)) {if(ch=='-') fg=-1;ch=getchar();}while( isdigit(ch)) res=(res<<1)+(res<<3)+(ch^48),ch=getchar();return res*fg; } const ll mod=998244353; int n,k; ll D,C[2505][2505],dp[55][2505]; ll qmi(ll a,ll b) {ll v=1;while(b){if(b&1) v=v*a%mod;b>>=1;a=a*a%mod;}return v; } void init() {for(int i=0;i<=2500;i++)for(int j=0;j<=i;j++) C[i][j]=(j?C[i-1][j]+C[i-1][j-1]:1)%mod;dp[0][0]=1;for(int i=0;i<n;i++)for(int j=0;j<=i*(k-1);j++)for(int t=0;t<k;t++)dp[i+1][j+t]=(dp[i+1][j+t]+dp[i][j]*C[j+t][t]%mod)%mod; } int main() { n=rd(),k=rd(),D=rd<ll>();init();D+=n*k;ll ans=0;for(int i=0;i<=n;i++){ll v=1;for(int j=0;j<=i*(k-1);j++){ll num=(i&1?mod-C[n][i]:C[n][i]);num=num*qmi(n-i,D-j)%mod*dp[i][j]%mod*v%mod;ans=(ans+num)%mod;v=v*(D-j)%mod*qmi(j+1,mod-2)%mod;}}for(int i=D-n*k+1;i<=D;i++) ans=ans*qmi(i,mod-2)%mod;printf("%lld\n",ans);return 0; }

總結

以上是生活随笔為你收集整理的2021牛客暑期多校训练营4 G-Product(组合意义+容斥原理)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。