正题

题目链接:https://www.luogu.com.cn/problem/AT4119


题目大意

一个集合\(S=\{k\in[1,n]\cup N\}\),它的所有子集作为元素组成的集合中要求满足每一个数字的出现之和不小于\(2\),求方案数对\(P\)取模。

\(1\leq n\leq 3000,P\in[10^8,10^{9}+9]\cup Pri\)


解题思路

考虑至少\(i\)个数选择次数不超过\(1\),那么这个方案的容斥系数就是\((-1)^i\)。

考虑怎么求这个方案,我们可以先不要被限制了的数,然后再将这些被限制了的数丢进被选出了的集合中。设有\(j\)个集合包含被限制了的数,那么丢进这些集合的方案就是\(\begin{Bmatrix} i+1\\j+1 \end{Bmatrix}\)(一个数字可以选择不丢所以开一个新的集合表示这个集合内的数不使用),然后剩下的数随意的选入这些集合中就是\((2^{n-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})^j
\]

直接预处理斯特林数计算就好了,时间复杂度\(O(n^2)\)


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【斯特林数,容斥】的更多相关文章

  1. [FJOI2017]矩阵填数——容斥

    参考:题解 P3813 [[FJOI2017]矩阵填数] 题目大意: 给定一个 h∗w 的矩阵,矩阵的行编号从上到下依次为 1...h ,列编号从左到右依次 1...w . 在这个矩阵中你需要在每个格 ...

  2. (noip模拟十七)【BZOJ3930】[CQOI2015]选数-容斥水法

    Description 我们知道,从区间[L,H](L和H为整数)中选取N个整数,总共有(H-L+1)^N种方案.小z很好奇这样选出的数的最大公约数的规律,他决定对每种方案选出的N个整数都求一次最大公 ...

  3. BZOJ 2287 DP+容斥

    思路: 先处理出来f[j]表示这i个物品都可用 填满容量j的方案数 容斥一发 处理出来g[j]=g[j-w[i]] 表示i不能用的时候 填满容量j的方案数 //By SiriusRen #includ ...

  4. 【CF715E】Complete the Permutations(容斥,第一类斯特林数)

    [CF715E]Complete the Permutations(容斥,第一类斯特林数) 题面 CF 洛谷 给定两个排列\(p,q\),但是其中有些位置未知,用\(0\)表示. 现在让你补全两个排列 ...

  5. ARC096 E Everything on It [容斥,斯特林数]

    Atcoder 一个900分的题耗了我这么久--而且官方题解还那么短--必须纪念一下-- 思路 发现每种元素必须出现两次以上的限制极为恶心,所以容斥,枚举出现0/1次的元素个数分别有几个.设出现1次的 ...

  6. BZOJ.5093.[Lydsy1711月赛]图的价值(NTT 斯特林数)

    题目链接 对于单独一个点,我们枚举它的度数(有多少条边)来计算它的贡献:\[\sum_{i=0}^{n-1}i^kC_{n-1}^i2^{\frac{(n-2)(n-1)}{2}}\] 每个点是一样的 ...

  7. BZOJ 4555: [Tjoi2016&Heoi2016]求和 (NTT + 第二类斯特林数)

    题意 给你一个数 \(n\) 求这样一个函数的值 : \[\displaystyle f(n)=\sum_{i=0}^{n}\sum_{j=0}^{i} \begin{Bmatrix} i \\ j ...

  8. 【CF961G】Partitions(第二类斯特林数)

    [CF961G]Partitions(第二类斯特林数) 题面 CodeForces 洛谷 题解 考虑每个数的贡献,显然每个数前面贡献的系数都是一样的. 枚举当前数所在的集合大小,所以前面的系数\(p\ ...

  9. BZOJ.4555.[HEOI2016&TJOI2016]求和(NTT 斯特林数)

    题目链接 \(Description\) 求\[\sum_{i=0}^n\sum_{j=0}^iS(i,j)\times 2^j\times j!\mod 998244353\] 其中\(S(i,j) ...

随机推荐

  1. SpringCloud(5)之分布式锁实现

    01为什么用分布式锁 在讨论这个问题之前,我们先来看一个业务场景:系统A是一个电商系统,目前是一台机器部署,系统中有一个用户下订单的接口,但是用户下订单之前一定要去检查一下库存,确保库存足够了才会给用 ...

  2. FTP 大文件传输问题 解决

    问题描述 将附件上传至FTP服务器,但是当附件过大,其大小为几百兆或1-2G时,会出现上传失败的现象 FTP上传原理解析 这里我们使用的是.Net的FtpWebRequest 创建FtpClient ...

  3. vue中v-show和v-if在显示和隐藏元素上的区别

    v-show将元素隐藏是在dom节点上加style='display:none' v-if是直接将元素完全去掉 拿v-show示例,(v-if 也是一样,把下面的代码中v-show替换成v-if即可运 ...

  4. 前端性能优化之http缓存

    前不久,公司前端开会,领导抽问了4个问题,前3个简单大家都答起来了,第4个问题关于缓存的这方面我只是了解,结果刚好问到我了(会的不问,专门挑我不熟悉的问,我这运气真是没话说),20多个前端看着我,答得 ...

  5. django1.9和mysql

    修改setting.py DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql',#使用mysql 'NAME': 'jiank ...

  6. kubebuilder实战之八:知识点小记

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  7. VS dll 引用依赖

    在公司实习过程中,经常遇到三个问题: 开发环境 dll引用依赖 dll版本控制 一般公司都会配置开发/测试/Lab/线上四个环境,之后不管时开发什么项目,都与环境分不开边.这个和dll版本控制暂且记下 ...

  8. Appium问题解决方案(2)- AttributeError:module 'appium.webdriver' has no attribute 'Remote'

    背景 运行脚本的时候,就直接报这个错误了,然后去看了下 appium.webdriver 库 结果发现啥都没有,就知道有问题了,然后一步步排查 步骤一 检查Appium-Python-Client 和 ...

  9. VUE005. 在data中使用 / 改变data,或在data中调用method函数

    使用三方UI库时经常会遇到在data中写入方法的场景,如Element-UI的级联选择器(动态加载part)需要在data中写入lazyLoad. 但后端总会给出意想不到的需求: 通过接口调取一串数据 ...

  10. CSS003. 盒子水平垂直居中简写属性(place-items)

    place-items  CSS 中的 place-items 是一个简写属性 ,它允许你在相关的布局(如 Grid 或 Flexbox)中可以同时沿着块级和内联方向对齐元素 (例如:align-it ...