标签:des style blog http color io os ar for
Description
different plans. Input
Output
Sample Input
4 1 2 10 1
Sample Output
14 36 30 8
思路:首先知道0和1异或是不会影响结果的,只有1和1异或且1的个数是奇数的时候才会对结果产生影响,所以我们把每个数都转换成二进制,统计每一位上的1的个数,利用组合数学解决
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
typedef long long ll;
using namespace std;
const int maxn = 1005;
const ll mod = 1000003;
ll C[maxn][maxn], ans[maxn];
int n, cnt[maxn];
void init() {
for (int i = 0; i <= 1001; i++)
C[i][0] = C[i][i] = 1;
for (int i = 2; i <= 1001; i++)
for (int j = 1; j < i; j++)
C[i][j] = (C[i-1][j] + C[i-1][j-1]) % mod;
}
void cal(int x) {
int cur = 0;
while (x) {
if (x & 1)
cnt[cur]++;
cur++;
x >>= 1;
}
}
int main() {
init();
int x;
while (scanf("%d", &n) != EOF) {
memset(cnt, 0, sizeof(cnt));
memset(ans, 0, sizeof(ans));
for (int i = 1; i <= n; i++) {
scanf("%d", &x);
cal(x);
}
for (int i = 1; i <= n; i++)
for (int j = 0; j < 32; j++)
for (int k = 1; k <= i; k += 2) {
ans[i] += (C[cnt[j]][k] % mod * C[n-cnt[j]][i-k] % mod) * (1<<j) % mod;
ans[i] %= mod;
}
for (int i = 1; i < n; i++)
printf("%lld ", ans[i]);
printf("%lld\n", ans[n]);
}
return 0;
}
HDU - 4810 Wall Painting(组合数学)
标签:des style blog http color io os ar for
原文地址:http://blog.csdn.net/u011345136/article/details/40323635