Atcoder Regular Contest 096 C - Everything on It(组合数学)
简单题,由于这场 arc 的 F 是 jxd 作业而我不会做,所以只好来把这场的 E 水掉了。
我们记 f(i) 为钦定 i 个元素出现次数不超过一次,剩余放任自流(cmd_blk 内味)的方案数,再记 g(i) 为恰好 i 个元素出现次数不超过一次的方案数,那么有 f(i)=\sum\limits_{j=i}^ng(j)\dbinom{j}{i},二项式反演一下可得 g(i)=\sum\limits_{j=i}^nf(j)\dbinom{j}{i}(-1)^{j-i},我们要求的答案即为 g(0)=\sum\limits_{i=0}^n(-1)^if(i)。
考虑怎样求 f(i),首先我们需钦定 i 个元素出现不超过一次,方案数为 \dbinom{n}{i},我们枚举这 i 个元素划分入多少个集合,设为 j,根据组合意义,可能会有一些元素出现了一次,那我们就新建一个集合 S_0 表示出现 0 次的数的集合,并新建一个 0 号元素,强制令 0\in S_0,这样等价于将 i+1 个元素放入 j+1 个非空集合,其中与 0 号元素被划分在一个集合的元素就是出现零次的元素,这样可得方案数为 \begin{Bmatrix}i+1\\j+1\end{Bmatrix}。
接下来考虑剩下 n-i 个元素,它们可以形成 2^{n-i} 个集合,由于剩下的元素放任自流,这 2^{n-i} 个集合每个又有选或者不选两种方案,方案数为 2^{2^{n-i}},另外剩余 n-i 个元素每个又可以放入原来 j 个非空集合中,每个元素是否放入每个集合都有 2 种选择,因此每个元素可选择的方案数为 2^j,总贡献为 2^{j\times(n-i)}。
因此 f(i)=\sum\limits_{j=0}^i\dbinom{n}{i}\begin{Bmatrix}i+1\\j+1\end{Bmatrix}·2^{2^{n-i}}·2^{j\times(n-i)},简单算一下就好了,n^2\log n 的做法显然,不过似乎过不去?稍微有点脑子的人也能优化到 n^2 罢……
const int MAXN=3e3; int n,mod,s[MAXN+5][MAXN+5],c[MAXN+5][MAXN+5]; void init(int n){ s[0][0]=c[0][0]=1; for(int i=1;i<=n;i++){ c[i][0]=1; for(int j=1;j<=i;j++){ c[i][j]=(c[i-1][j-1]+c[i-1][j])%mod; s[i][j]=(s[i-1][j-1]+1ll*s[i-1][j]*j)%mod; } } } int qpow(int x,int e,int mod){ int ret=1; for(;e;e>>=1,x=1ll*x*x%mod) if(e&1) ret=1ll*ret*x%mod; return ret; } int main(){ scanf("%d%d",&n,&mod);init(n+1);int ans=0; for(int i=0;i<=n;i++){ int sum=0,pww=qpow(2,qpow(2,n-i,mod-1),mod),bs=qpow(2,n-i,mod),pw=1; for(int j=0;j<=i;j++,pw=1ll*pw*bs%mod){ sum=(sum+1ll*s[i+1][j+1]*c[n][i]%mod*pww%mod*pw%mod)%mod; } if(i&1) ans=(ans-sum+mod)%mod; else ans=(ans+sum)%mod; } printf("%d\n",ans); return 0; }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· DeepSeek 解答了困扰我五年的技术问题。时代确实变了!
· 本地部署DeepSeek后,没有好看的交互界面怎么行!
· 趁着过年的时候手搓了一个低代码框架
· 推荐一个DeepSeek 大模型的免费 API 项目!兼容OpenAI接口!