BoB004-F: Doubling Game

2 secs 1024 MB
kyaneko999's icon kyaneko999

解説

まず,以下のことが成り立ちます.

  • A,B,KA,B,K の最大値を M(=1018)M (=10^{18}) とする.ゲーム終了時の状態 (X,Y)(X,Y) について X6MX\le 6M かつ Y6MY\le 6M が成り立つ.

【証明】
X>6MX>6M または Y>6MY>6M が成り立つと仮定した場合に矛盾が生じることを示します.
ゲームが引き分けた場合として,X>6MX>6M かつ Y=XY=X を仮定します.
X>MX>M より (X,Y)(X,Y)(A,B)(A,B) として最初から与えられることはないので,別の状態から遷移が起きたはずです.
ゲームが終了する 11 つ前の状態は (X,X/2)(X,X/2) または (X/2,X)(X/2,X) となりますが,XX/2=X/2>3M>KX-X/2=X/2>3M>K より矛盾します.
あなたが勝った場合として,X>6MX>6M かつ X>YX>Y を仮定します.
上と同様に,ゲームが終了する 11 つ前の状態が存在して (X/2,Y)(X/2,Y) となります.
この時 0<YX/2K0<Y-X/2\le K が成り立つはずなので,X/2<YK+X/2X/2<Y\le K+X/2 となります.
X/2>MX/2>M かつ Y>MY>M より,(X/2,Y)(X/2,Y)(A,B)(A,B) として最初から与えられることはないので,遷移前の状態が存在します.
考えられるのは (X/4,Y)(X/4,Y)(X/2,Y/2)(X/2,Y/2)22 通りです.
前者の場合,YX/4>X/2X/4=X/4>3M/2>KY-X/4>X/2-X/4=X/4>3M/2>K より矛盾します.
後者の場合,X/2Y/2X/2(K+X/2)/2=X/4K/2>3M/2M/2=MKX/2-Y/2\ge X/2-(K+X/2)/2=X/4-K/2>3M/2-M/2=M\ge K より矛盾します.
Sakky さんが勝った場合については,あなたが勝った場合の X,YX,Y を入れ替えて同様の議論を行うことで示せます.

以上より,X,YX,Y の値には上限 6M6M が存在するため,ゲームの遷移は高々 O(logM)O(\log M) 回しか起こりません.
また,今回の制約の下では 6M<2636M<2^{63} が成り立つため,X,YX,Y の値は 64bit 整数の範囲に収まります.
よって,各クエリに対する愚直なシミュレーションが可能であり,全体の計算量は O(QlogM)O(Q\log M) です.

解答例(Python)