結論:実際には、チョコレートは石の数である石のすべての山はの尾までの距離であります
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)。 } }