ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

[ARC096E] Everything on It

2021-01-24 16:33:28  阅读:145  来源: 互联网

标签:元素 int void MN Everything ARC096E inline mod


[题目链接]

https://atcoder.jp/contests/arc096/tasks/arc096_c

[题解]

考虑容斥原理 , 考虑钦定 \(i\) 个元素出现次数小于 \(2\)。

那么显然可以枚举将 \(i\) 个元素分为 \(j\) 组的方案数 , 因为允许有元素没有出现 , 所以不妨新加入一个元素 \(0\) 和一个组 , 将 \(0\) 号元素所在的组内元素定义为未出现。

然后考虑剩下 \((n - i)\) 个元素可以组成 \(2 ^ {n - i}\) 个集合 , 那么方案数为 \(2 ^ {2 ^ {n - i}}\) , 这 \((n - i)\) 个元素还可以往 \(j\) 个组内放 , 方案数 \((2 ^ {n - i}) ^ j\)。

于是至少 \(i\) 个的答案就是 \(\begin{Bmatrix}i + 1\\j + 1\end{Bmatrix} \cdot 2 ^ {2 ^ {n - i}} \cdot (2 ^ {n - i}) ^ j\) , 乘上容斥系数累加即可。

时间复杂度 : \(O(N ^ 2)\)

[代码]

#include<bits/stdc++.h>

using namespace std;

#define rep(i , l , r) for (int i = (l); i < (r); ++i)

typedef long long LL;

const int MN = 3005;

int n , mod , s[MN][MN] , c[MN][MN] , ans;

inline void inc(int &x , int  y) {
	  x = x + y < mod ? x + y : x + y - mod;
} 
inline void dec(int &x , int y) {
	  x = x - y >= 0 ? x - y : x - y + mod;
}
inline int qPow(int a , int b , int mod) {
		int c = 1;
		for (; b; b >>= 1 , a = 1ll * a * a % mod) if (b & 1) c = 1ll * c * a % mod;
		return c;
}
inline void init() {
		s[0][0] = c[0][0] = 1;
		for (int i = 1; i <= n + 1; ++i) {
				c[i][0] = 1;
				for (int j = 1; j <= i; ++j) {
						s[i][j] = (s[i - 1][j - 1] + 1ll * s[i - 1][j] * j % mod) % mod;
						c[i][j] = (c[i - 1][j - 1] + c[i - 1][j]) % mod;
				}
		}
		return;
}

int main() {
		
		scanf("%d%d" , &n , &mod); init();
		for (int i = 0; i <= n; ++i) {
				int one = qPow(2 , n - i , mod);
				int coef = i & 1 ? mod - 1 : 1 , res = 0;
				coef = 1ll * coef * c[n][i] % mod * qPow(2 , qPow(2 , n - i , mod - 1) , mod)	% mod;
				int cur = 1;
				for (int j = 0; j <= i; ++j) {
						inc(res , 1ll * s[i + 1][j + 1] * cur % mod);
						cur = 1ll * cur * one % mod;
				}
				inc(ans , 1ll * coef * res % mod);
		}
		printf("%d\n" , ans);
	  return 0;
}

标签:元素,int,void,MN,Everything,ARC096E,inline,mod
来源: https://www.cnblogs.com/evenbao/p/14321290.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有