hdu 4810 Wall Painting


錯了好多遍啊。


#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;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章