[HNOI2007] SGは、テーブルゲーム部門のゲームをプレイします

結論:実際には、チョコレートは石の数である石のすべての山はの尾までの距離であります

SGは、テーブルを作ることができます

#include <ビット/ STDC ++ H>
 使用して 名前空間STDを、
typedefの長い 長いLL。
int型の SG [ 30 ]。
int型 NUM [ 30 ]。
BOOL VIS [ 1005 ];
INT {main()の
        SG [ 0 ] = 0 ;
        以下のためにint型 i = 1 ; iは<= 25 ; I ++ ){
                memsetの(VIS、0はsizeof (VIS))。
                int型 - J = 1 ; J> = 0 ; j-- ){
                         ためのint型 K = J、K> = 0 ; k-- ){
                                ビュー[SG [J] ^ SG [K] = 1 
                        }
                }
                以下のためのint型 J = 0 ; J <= 1000年 ; J ++ ){
                         場合(!VIS [J]){
                                SG [i]を = J;
                                破ります;
                        }
                }
        }
        int型TNTを。
        scanf関数(" %のD "、&TNT)。
        一方、(TNT-- ){
                 int型 ANS = 0 int型のn;
                scanf関数(" %のD "、&N)
                以下のためにint型 i = 0 ; iがn <; iは++ ){
                        scanf関数(" %のD "、&NUM [I])。
                        もし(NUM [I]&1 ){ ^ = SG [N - I - 1 ];
                        }
                }


                int型 A1 = - 1 、B1、C1;
                int型 CNT = 0 ;
                int型 I = 0 ; iがN < - 1 ; iが++ ){
                         場合(NUM [I]){
                                 ためint型 J = I + 1、J <nであり、j ++ ){
                                         ためのint型のk = jは、N <Kあり、k ++ ){
                                                 場合((ANS ^ SG [ - - I N 1 ^ SG [N - J - ] 1 ] ^ SG [N - K -1 ])== 0 ){
                                                        CNT ++ ;
                                                        もし(A1 == - 1 ){
                                                                A1 = I、B1 = J、C1 = K;
                                                        }
                                                }
                                        }
                                }
                        }
                }
                もし(CNT == 0 ){
                        printf(" -1 -1 -1 \ nを" );
                } {
                        printf(" %D%D%D \ n " 、A1、B1、C1)。
                }
                printf(" %d個の\ n " 、CNT)。

        }
}

 

おすすめ

転載: www.cnblogs.com/Aragaki/p/11668454.html