HDU-4810ウォールペイント2013ACM / ICPCアジア南京駅のサイトのゲーム

トピックリンクhttp://acm.hdu.edu.cn/showproblem.php?pid=4810

 

問題解決のアイデア:

各数の個々のビットや質問の意味に従ってレコード番号1、生成する排他的論理和値は、このような三人の1 1 6内に取るような数学的方法の組み合わせによって、ベース1を取る必要があり、取得方法は、C(6,3)を持って、あなたはすぐにそれは、C(6,3)を取得できますか?三角形でテーブルを再生することができます

#include <iostreamの> 
する#include <cstdioを> 
する#include <CStringの>
 使用して 名前空間STD; の#define P 1000003
 INT N-、C [ 1005 ] [ 1005 ]、SUM [ 40 ]、A、ANS [ 1005 ]、T; 
// C [] []三角形記録
// SUM []数1はそれぞれに記録されている;
// ANS [] k個のレコード日数の実施形態
INT メイン() {
//三角形プレイテーブル、レコードC( M、N-)
のためのINT I = 0 ; I <= 1000年 ; I ++ { C [I] [ 0 ] = 1 ; C [i]は[I](合計))。= 1 ; } ためINT iが= 1 ; I <= 1000年 ; I ++ { ためINT J = 1、J <I、J ++ { C [I] [J] =(C [iが- 1 ] [J]%のP + C [I- 1 ] [J- 1 ]%P)%のP。 } } ながら(〜のscanf(" %d個"、&N)) { memsetの(和、0はsizeof のmemset(ANS、0はsizeof (ANS));
    //レコードごとになります何
のためにINT I = 0、I <N - 、I ++ { int型T; scanfの(" %のD "、&T) ; のためのINT J = 0 ; T J ++、T = >> 1。 { IF(%T 2)SUM [J] ++ ; //ビット1; } } のためのint型 K = 1。 ; K <= N; K ++ { 以下のためにint型私は= 0をI < 32 ; I ++ { ためINT J = 1 ; J <=和[I] && J <= K; J + = 2 ){ T =(長い 長い)C [和[I]、[J] * C [N-和[I] [KJ]%P *(1 << I)%のP。 ANS [K] =(ANS [K] + T)%のP。 } } } のためのint型のk = 1 ; K <= N; K ++ のprintf("%D%Cは"、[k]をANS、K <N?' '' \ n ' ); } }

おすすめ

転載: www.cnblogs.com/hulian425/p/12185812.html