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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

AT4119-[ARC096C]Everything on It【斯特林数,容斥】

發布時間:2023/12/3 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 AT4119-[ARC096C]Everything on It【斯特林数,容斥】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

正題

題目鏈接:https://www.luogu.com.cn/problem/AT4119


題目大意

一個集合S={k∈[1,n]∪N}S=\{k\in[1,n]\cup N\}S={k[1,n]N},它的所有子集作為元素組成的集合中要求滿足每一個數字的出現之和不小于222,求方案數對PPP取模。

1≤n≤3000,P∈[108,109+9]∪Pri1\leq n\leq 3000,P\in[10^8,10^{9}+9]\cup Pri1n3000,P[108,109+9]Pri


解題思路

考慮至少iii個數選擇次數不超過111,那么這個方案的容斥系數就是(?1)i(-1)^i(?1)i

考慮怎么求這個方案,我們可以先不要被限制了的數,然后再將這些被限制了的數丟進被選出了的集合中。設有jjj個集合包含被限制了的數,那么丟進這些集合的方案就是{i+1j+1}\begin{Bmatrix} i+1\\j+1 \end{Bmatrix}{i+1j+1?}(一個數字可以選擇不丟所以開一個新的集合表示這個集合內的數不使用),然后剩下的數隨意的選入這些集合中就是(2n?i)j(2^{n-i})^j(2n?i)j
那么答案出來了
∑i=0n(?1)i22n?i(ni)∑j=0i{i+1j+1}(2n?i)j\sum_{i=0}^n(-1)^i2^{2^{n-i}}\binom{n}{i}\sum_{j=0}^i\begin{Bmatrix}i+1\\ j+1\end{Bmatrix}(2^{n-i})^ji=0n?(?1)i22n?i(in?)j=0i?{i+1j+1?}(2n?i)j

直接預處理斯特林數計算就好了,時間復雜度O(n2)O(n^2)O(n2)


code

#include<cstdio> #include<cstring> #include<algorithm> #define ll long long using namespace std; const ll N=3100; ll n,P,s[N][N],fac[N],ans; ll power(ll x,ll b,ll p=P){ll ans=1;while(b){if(b&1)ans=ans*x%p;x=x*x%p;b>>=1;}return ans; } ll C(ll n,ll m) {return fac[n]*power(fac[m],P-2)%P*power(fac[n-m],P-2)%P;} signed main() {scanf("%lld%lld",&n,&P);s[0][0]=fac[0]=1;for(ll i=1;i<=n;i++)fac[i]=fac[i-1]*i%P;for(ll i=1;i<=n+1;i++)for(ll j=1;j<=i;j++)s[i][j]=(s[i-1][j-1]+j*s[i-1][j]%P)%P;for(ll i=0;i<=n;i++){ll sum=0,tmp=power(2,power(2,n-i,P-1));if(i&1)tmp=P-tmp;tmp=tmp*C(n,i)%P;for(ll j=0,z=1,p=power(2,n-i);j<=i;j++,z=z*p%P)(sum+=s[i+1][j+1]*z%P)%=P;(ans+=sum*tmp)%=P;}printf("%lld\n",ans);return 0; }

總結

以上是生活随笔為你收集整理的AT4119-[ARC096C]Everything on It【斯特林数,容斥】的全部內容,希望文章能夠幫你解決所遇到的問題。

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