解説
まず,以下のことが成り立ちます.
- A,B,K の最大値を M(=1018) とする.ゲーム終了時の状態 (X,Y) について X≤6M かつ Y≤6M が成り立つ.
【証明】
X>6M または Y>6M が成り立つと仮定した場合に矛盾が生じることを示します.
ゲームが引き分けた場合として,X>6M かつ Y=X を仮定します.
X>M より (X,Y) が (A,B) として最初から与えられることはないので,別の状態から遷移が起きたはずです.
ゲームが終了する 1 つ前の状態は (X,X/2) または (X/2,X) となりますが,X−X/2=X/2>3M>K より矛盾します.
あなたが勝った場合として,X>6M かつ X>Y を仮定します.
上と同様に,ゲームが終了する 1 つ前の状態が存在して (X/2,Y) となります.
この時 0<Y−X/2≤K が成り立つはずなので,X/2<Y≤K+X/2 となります.
X/2>M かつ Y>M より,(X/2,Y) が (A,B) として最初から与えられることはないので,遷移前の状態が存在します.
考えられるのは (X/4,Y),(X/2,Y/2) の 2 通りです.
前者の場合,Y−X/4>X/2−X/4=X/4>3M/2>K より矛盾します.
後者の場合,X/2−Y/2≥X/2−(K+X/2)/2=X/4−K/2>3M/2−M/2=M≥K より矛盾します.
Sakky さんが勝った場合については,あなたが勝った場合の X,Y を入れ替えて同様の議論を行うことで示せます.
以上より,X,Y の値には上限 6M が存在するため,ゲームの遷移は高々 O(logM) 回しか起こりません.
また,今回の制約の下では 6M<263 が成り立つため,X,Y の値は 64bit 整数の範囲に収まります.
よって,各クエリに対する愚直なシミュレーションが可能であり,全体の計算量は O(QlogM) です.