HDU-4810 Wall Painting
2015-07-31 20:28
531 查看
题目:
http://acm.hdu.edu.cn/showproblem.php?pid=4810题意:
给出n种颜色,求1到n种颜色混合产生的颜色种类和。颜色混合就是对应数字异或;
第k个答案就是在n种颜色中随机挑选k个进行混合的全部结果之和。
思路:
位运算,按位异或之和等于各数字异或和;数据小,直接打表组合数,然后按位求得所有可能数,详见code;
代码:
#define MOD 1000003 #define N 1123 int n,m; int flag,res; long long sum,ans,t; long long a ,b ; long long f ,c ; 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; }
相关文章推荐
- 矩阵快速幂 POJ 3735 Training little cats
- (easy)LeetCode 217.Contains Duplicate
- HUAS Summer Trainning #3~C
- HDU 5328 Problem Killer (2015 Multi-University Training Contest 4 2015多校联合)
- Doing Homework again
- HDU 5327 Olympiad (2015 Multi-University Training Contest 4 2015多校联合)
- hdu 1789 Doing Homework again
- waiting for xdebug session
- HUAS Summer Trainning #3~K
- Hdu 5309 JRY is Fighting 2015 Multi-University Training Contest 2
- 2015 Multi-University Training Contest 1(HDOJ5288、5289)
- sleep和wait有什么区别
- hdoj 1789 Doing Homework again
- HDU1789:Doing Homework again 【贪心】
- LeetCode219——Contains Duplicate II
- hdu杭电1789 Doing Homework again【优先队列+贪心】
- HDOJ 1789 Doing Homework again(贪心,好题)
- PicklingError: Can't pickle <type 'thread.lock'>: attribute lookup thread.lock failed
- 阿里云SSH "Write failed: Broken pipe"的问题解决方法
- Doing Homework again