您的位置:首页 > 大数据 > 人工智能

hdu 4810 Wall Painting

2013-12-12 14:54 302 查看
错了好多遍啊。

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
#define LL __int64
#define mod 1000003
LL n;
LL a[1100];
LL num[150];
LL C[1100][1100];
void init()
{
for (int i=0;i<=1010;i++)
{
C[i][0]=1;
C[i][i]=1;
}
for(LL i=1;i<=1010;i++)
for(LL j=1;j<=i;j++)
C[i][j]=((LL)C[i][j-1]*(LL)(i-j+1)/(LL)j)%mod;
}
int main()
{
init();
while(cin>>n)
{
for(LL i=0;i<n;i++)
cin>>a[i];
memset(num,0,sizeof(num));
for(LL i=0;i<n;i++)
for(LL j=0;j<=63;j++)
{
num[j]+=(a[i]&1);
a[i]>>=1;
}

for(LL k=1;k<=n;k++)
{
LL ans=0;
for(LL i=0;i<=63;i++)
for(LL j=1;j<=num[i];j+=2)
if(k-j>=0&&n-num[i]>=k-j)
ans=(ans+((LL)C[num[i]][j]*C[n-num[i]][k-j])%mod*(LL)((LL)1<<i))%mod;
if(k==n)
printf("%I64d\n",ans%mod);
else
printf("%I64d ",ans%mod);
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: