ウォールペイントHDU - 4810(ビット演算子の貢献)

タイトル

Ms.Fangは非常に多くの絵が大好きです。彼女はGFW(グレートウォールおかしい)毎日をペイントします。毎日塗る前に、彼女は水と顔料のいくつかの袋を混合することにより、顔料の素敵な色を作り出します。K-日目に、彼女は顔料のKの具体的なバッグを選択して、彼女はその日に使用する顔料の色を得るためにそれらをミックスします。彼女は色Aと色Bを有する顔料の袋を持つ顔料のバッグをミックスすると、彼女は色A XOR Bと顔料を得るでしょう
、彼女は同じ色の顔料の2袋をミックスすると、彼女はいくつかの奇妙な理由のために色ゼロを取得します。今、彼女の夫Mr.Fangは、顔料Ms.FangのK袋はK-日目に選択されますかについては考えていません。彼はMs.Fangは異なる計画を取得します色の合計を不思議。

例えば、彼女は3種類のプランで色3、3、0を得ることができ、カラー2と顔料のN = 3、K = 2と3袋、1、2を想定しています。この例では、Mr.Fangは二日目に取得したいの答えは3 + 3 + 0 = 6である
Mr.Fangが、彼はそれにあまりにも多くの時間を費やすしたくないように忙しいです。あなたは彼を助けることはできますか?
あなたは初日からn番目の日にMr.Fangに答えを教えてください。
入力
いくつかのテストケース、EOFまでしてくださいプロセスがあります。
各テストケースのために、最初の行が選択図第二行は、N個の整数を含む単一の整数N(1 <= N <= 10 3)を含みます。i番目の整数は、i番目のバッグ中の顔料の色を表します。
出力
各テストケースについて、n番目の日に最初の日からの回答を表す線に出力Nの整数(10 6 +3 MOD)。
サンプル入力
4
1 2 10 1
サンプル出力
14 36 30 8

説明

バイナリで書かれた各番号に、各問題がバイナリ算術問題の対応する数に変換することができ、加え小数に、この結果を得ます。
1,0当たりのビットの数の統計は、次いでCが(N、I)、ビット操作ので、桁の奇数のみの寄与を生成することができる場合について、jが奇数に等しい、未満である場合Iに等しく、そして次いで0 IJ月内部から休息を取る、それはこの上の2つの辺の組み合わせの数を乗算した結果です。
答えを得るために、私++、サイクルこの蓄積処理。
組合せの数(1)O.マーキングによってアクセス

#include <cstdio>
#include <cstring>
#define ll long long
long long const mod =1e6+3;
ll C[1002][1002];
void cal(){
	C[0][0] = C[1][0] = C[1][1]= 1;
	C[2][0] = C[2][2] = 1;
	C[2][1] = 2;
	for(int i = 3; i <= 1000; i++){
		C[i][0] = C[i][i] = 1;
		for(int j = 1; j < i; j++)
			C[i][j] = (C[i-1][j]+C[i-1][j-1])%mod;
	}
}
int pos[35][2];
void get(int x){
	int k = 0;
	int i = 0;
	while(x){
		if(x%2 == 1)
			pos[k++][1]++;
		else
			pos[k++][0]++;
		x /=2;
		i++;
	}
	while(i <= 34)
		pos[i++][0]++; 
}
int main(){
	int n;
	int ch;
	cal();
	while(~scanf("%d", &n)){
		memset(pos, 0, sizeof(pos));
		for (int i = 0; i < n; i++){
			scanf("%d", &ch);
			get(ch);
		}	
		
		ll ans;
		int flag = 1;
		for (int i = 1; i <= n; i++){
			ans = 0;
			ll dig = 1;
			for(int k = 0; k <= 34; k++){		
				for (int j = 1; (j <= pos[k][1] && j <= i); j += 2){
					ans =((ll)(C[pos[k][1]][j]*C[pos[k][0]][i-j]%mod*dig%mod)%mod+ans)%mod;		
				}
				dig *= 2;
			}
			if(flag == 1){
				printf("%lld", ans);
				flag = 0;
			}
			else
				printf(" %lld", ans);
		}
		printf("\n");
	}
	return 0;
}
公開された52元の記事 ウォンの賞賛2 ビュー829

おすすめ

転載: blog.csdn.net/qq_44714572/article/details/103956533