HDU-4810 Wall Painting
来源:互联网 发布:数据分析师 国外 认证 编辑:程序博客网 时间:2024/05/03 23:46
题目:
http://acm.hdu.edu.cn/showproblem.php?pid=4810
题意:
给出n种颜色,求1到n种颜色混合产生的颜色种类和。
颜色混合就是对应数字异或;
第k个答案就是在n种颜色中随机挑选k个进行混合的全部结果之和。
思路:
位运算,按位异或之和等于各数字异或和;
数据小,直接打表组合数,然后按位求得所有可能数,详见code;
代码:
#define MOD 1000003#define N 1123int n,m;int flag,res;long long sum,ans,t;long long a[N],b[N];long long f[N][N],c[N][N];void init(){ memset(f,0,sizeof(f)); for(int i=0;i<N;i++) f[i][0]=f[i][i]=1; for(int i=1;i<N;i++) for(int j=1;j<i;j++) f[i][j] = (f[i-1][j]+f[i-1][j-1])%MOD;}int main(){ int i,j,k; init(); while(scanf("%d",&n)!=EOF&&n) { memset(b,0,sizeof(b)); res=0; for(i=0;i<n;i++) { scanf("%lld",&t); j=0; while(t) { if(t&1) b[j]++; j++; t>>=1; } } for(k=1;k<=n;k++) { sum = 0; t = 1; for(i=0;i<32;i++) { ans=0; for(j=1;j<=k;j+=2) ans=(ans+(f[b[i]][j]*f[n-b[i]][k-j])%MOD)%MOD; sum=(sum+ans*t%MOD)%MOD; t*=2; } if(k!=1)printf(" "); printf("%lld",sum); } printf("\n"); } return 0;}
0 0
- HDU 4810 Wall Painting
- hdu 4810 Wall Painting
- hdu 4810 Wall Painting
- HDU-4810 Wall Painting
- HDU 4810 Wall Painting
- HDU 4810 Wall Painting
- HDU 4810 Wall Painting(组合数学)
- hdu 4810 Wall Painting(组合数学)
- HDU 4810 Wall Painting 异或性质
- 【位运算】 HDU 4810 Wall Painting
- HDU - 4810 Wall Painting(组合数学)
- hdu 4810 Wall Painting(组合数学)
- HDU 4810 Wall Painting(异或 +按位容斥)
- hdu 4810 Wall Painting 位操作
- HDU 4810 Wall Painting(组合数学)
- HDU Problem - 4810 Wall Painting【组合数学】
- 【HDU 4810】组合数学 Wall painting
- hdu 4810 Wall Painting 枚举+位运算
- Android之——判断当前应用程序是否是用户程序
- 数字图像学习2
- java类的特性
- Spark API
- 【leetcode】Anagrams
- HDU-4810 Wall Painting
- hdu 5212 code 容斥~或者莫比乌斯
- 黑马程序员---iOS基础---OC的开始
- 【2015多校】【hdoj 5336】XYZ and Drops 模拟 论时间驱动的模拟实现与事件驱动的模拟实现
- 沙盒账号Sandbox测试支付,提示 无法连接到itunes store
- 字符串的全排列和组合算法
- Sublime_text_3 破解
- 华为 OJ 数字颠倒
- 栈和队列