zoukankan      html  css  js  c++  java
  • [ARC096E] Everything on It

    [题目链接]

    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) 个的答案就是 (egin{Bmatrix}i + 1\j + 1end{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
    " , ans);
    	  return 0;
    }
  • 相关阅读:
    装饰器的应用
    绑定路由关系
    基本使用
    numpy多项式拟合
    pandas空值处理与插值
    索引
    事务
    子查询
    视图
    自关联
  • 原文地址:https://www.cnblogs.com/evenbao/p/14321290.html
Copyright © 2011-2022 走看看