1067バッシュゲームV2
石のN個の束の合計があります。AB 2人が、取得を交代します。あなただけの石が勝つために最後の人を持って、3、4つ星を取ることができます。ABの仮定は、プロセスは、石のミスになりません、非常に賢いです。最終的にはゲームに勝つ尋ねNを、与えられました。
例えば、N = 2。最後のものだけが、Bの石を得ることができ、1を取ることができます。
エントリー
行1:数T、番号が後の入力として使用されるテストの数を示します。(1 <= T <= 10000 ) 数Nあたりの行1:T + 1行- 2 (1 <= N <= 10 ^ 9)
輸出
出力A、Bがあれば、出力Bを勝利した場合、総ラインT、Aが勝ちます
SG機能は、第一法則を見つけ、その後、テーブルを打ちます。我々は7%==をN 0 || N%ことを見出し 7 == 2が0場合、SGです。
テーブルコードを再生します
#include <ビット/ STDC ++ H> 使用して 名前空間STDを、 #defineっ長い長 のconst int型 N = 100、M = 5E5 + 5 。 int型 V [N]、SG [N]、S [ 3 ] = { 1、3、4 }。 INT MEX(INT X) { memsetの(V、0、はsizeof (V))。 以下のために(int型 i = 0 ; iは< 3 ; I ++ ) { 場合(X < S [i])と ブレーク。 V [SG [X -s [I]]] = 1 。 } のための(int型 I = 0 ;; iは++ ) { 場合(!V [i])と リターンiが、 } } int型のmain() { int型私は、 SG [ 0 ] = 0 ; 以下のために(int型 i = 1 ; iがNを<; iは++ ) { SGの[I] = MEX(I)。 } のために(int型 i = 0 ; iがNを<; iは++ ) { printf("SG [%のD] =%Dを\ n " 、I、SG [I]); } 戻り 0 ; }
ACコード
#include <ビット/ STDC ++ H> 使用して 名前空間STDを、 #defineっ長い長いint型のmain() { int型T、N、X。 CIN >> T; 一方、(T-- ) { CIN >> X。 もし(xは%7 == 0 || X%7 == 2 ) { のprintf(" Bに\ n " ); } 他 { のprintf(" の\ n " ); } } リターン 0 ; }