回收网站怎么做,xampp 搭建wordpress,wordpress可以做微博,济南做网络安全的公司正题
题目链接:https://www.luogu.com.cn/problem/AT4119 题目大意
一个集合S{k∈[1,n]∪N}S\{k\in[1,n]\cup N\}S{k∈[1,n]∪N}#xff0c;它的所有子集作为元素组成的集合中要求满足每一个数字的出现之和不小于222#xff0c;求方案数对PPP取模。 1≤n≤3000,P∈[108,109…正题
题目链接: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,1099]∪Pri1\leq n\leq 3000,P\in[10^8,10^{9}9]\cup Pri1≤n≤3000,P∈[108,1099]∪Pri 解题思路
考虑至少iii个数选择次数不超过111那么这个方案的容斥系数就是(−1)i(-1)^i(−1)i。
考虑怎么求这个方案我们可以先不要被限制了的数然后再将这些被限制了的数丢进被选出了的集合中。设有jjj个集合包含被限制了的数那么丢进这些集合的方案就是{i1j1}\begin{Bmatrix} i1\\j1 \end{Bmatrix}{i1j1}一个数字可以选择不丢所以开一个新的集合表示这个集合内的数不使用然后剩下的数随意的选入这些集合中就是(2n−i)j(2^{n-i})^j(2n−i)j。 那么答案出来了 ∑i0n(−1)i22n−i(ni)∑j0i{i1j1}(2n−i)j\sum_{i0}^n(-1)^i2^{2^{n-i}}\binom{n}{i}\sum_{j0}^i\begin{Bmatrix}i1\\ j1\end{Bmatrix}(2^{n-i})^ji0∑n(−1)i22n−i(in)j0∑i{i1j1}(2n−i)j
直接预处理斯特林数计算就好了时间复杂度O(n2)O(n^2)O(n2) code
#includecstdio
#includecstring
#includealgorithm
#define ll long long
using namespace std;
const ll N3100;
ll n,P,s[N][N],fac[N],ans;
ll power(ll x,ll b,ll pP){ll ans1;while(b){if(b1)ansans*x%p;xx*x%p;b1;}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 i1;in;i)fac[i]fac[i-1]*i%P;for(ll i1;in1;i)for(ll j1;ji;j)s[i][j](s[i-1][j-1]j*s[i-1][j]%P)%P;for(ll i0;in;i){ll sum0,tmppower(2,power(2,n-i,P-1));if(i1)tmpP-tmp;tmptmp*C(n,i)%P;for(ll j0,z1,ppower(2,n-i);ji;j,zz*p%P)(sums[i1][j1]*z%P)%P;(anssum*tmp)%P;}printf(%lld\n,ans);return 0;
}