OUPC2025 OPENコンテスト 2026/03/29 09:00 ~ 2026/03/29 14:00 5:00:00.000

Q Double, Plus, Minus

問題
制限時間: 2 sec メモリ制限: 1024 MB
Double, Plus, Minus
Statement

\(2\) つのプログラム Alice, Bob が協力してゲームを \(T\) 回行います。

各ゲームは次のように行われます。

\(0\) 以上 \(2^{60}\) 未満の整数 \(X\) があります。はじめ、Alice のみ \(X\) を知っています。
整数 \(x\) があり、はじめ \(x=0\) です。ゲームの目的は \(x\) を \(X\) に一致させることです。
そのために、Alice から交互に、以下の \(4\) つの操作のうち \(1\) つ選んで行うことができます。
ただし、\(x\) の値は常に \(0\) 以上 \(2^{60}\) 未満となっている必要があります。
  • double: \(x\) を \(2\) 倍する。
  • plus: \(x\) に \(1\) を加算する。
  • minus: \(x\) から \(1\) を引く。
  • answer: \(x\) と \(X\) が一致したと報告する。この操作は \(2\) つのプログラムで合計ちょうど \(1\) 回行う必要がある。

一方のプログラムが操作をしたとき、どの操作をしたかが他方のプログラムに教えられます。

answer を行ったときに \(x\) と \(X\) が一致していたらゲームは成功となります。このとき、\(2\) つのプログラムが行った操作回数の和が少ないほど良い評価が得られます。

できるだけ少ない回数の操作でゲームを成功させるような \(2\) つのプログラム Alice, Bob を作成してください。

すべてのゲームにおいて、\(2\) つのプログラムが行った操作回数の和が \(120\) 回以下であるとき、満点が得られます。

Interaction

この問題はインタラクティブ問題(あなたの作成したプログラムとジャッジプログラムが入出力を介して対話を行う形式の問題)です。 Alice として振る舞うあなたのプログラムと、Bob として振る舞うあなたのプログラムが、ジャッジプログラムを介してゲームを行います。

あなたのプログラムは、最初に以下の形式で入力を受け取ってください。

\(\mathrm{Player}\)
\(T\)

ここで、\(\mathrm{Player}\) は文字列 Alice または文字列 Bob であり、\(T\) は \(1\) 以上 \(100\) 以下の整数です。

  • \(\mathrm{Player} =~\)Alice である場合、あなたのプログラムはこれ以降 Alice として振る舞わなければなりません。
  • \(\mathrm{Player} =~\)Bob である場合、あなたのプログラムはこれ以降 Bob として振る舞わなければなりません。

その後、各ゲームについて以下に示す入出力を行ってください。

ゲームの開始時、Alice として振る舞うプログラムは、以下の形式で入力を受け取ってください。

\(X\)
ここで、\(X\) は \(0\) 以上 \(2^{60}\) 未満の整数です。

操作を行う場合、以下の形式で出力してください。

\(\mathrm{operation}\)
ここで、\(\mathrm{operation}\) は 文字列 double, 文字列 plus, 文字列 minus, 文字列 answer のいずれかでなければなりません。

相手のプログラムが行った操作 \(\mathrm{operation}'\) は、以下の形式で入力を受け取ってください。

\(\mathrm{operation}'\)
ここで、\(\mathrm{operation}'\) は 文字列 double, 文字列 plus, 文字列 minus, 文字列 answer のいずれかです。

\(T\) 回目のゲームで文字列 answer を出力した、または入力として受け取った後は、ただちにプログラムを終了してください。

出力形式にミスがあった場合や前回のゲームに失敗した場合、\(1\) 回のゲームにおける \(2\) つのプログラムの操作回数が \(240\) を超えた場合、それ以降の \(X\) や \(\mathrm{operation}'\) は与えられず、文字列 -1 が標準入力から与えられます。この場合、ただちにプログラムを終了してください。

Scoring

ある \(1\) 回のゲームにおける、\(2\) つのプログラムの操作回数の和を \(Q'\) とします。この問題のすべてのゲームにわたる \(Q'\) の最大値を \(Q\) として、

  • \(Q \leq 120\) のとき、\(100\) 点
  • \(120 \lt Q \leq 240\) のとき、\(\displaystyle \left\lfloor10 + 40 \log_2\left(\frac{240}{Q}\right)\right\rfloor\) 点
  • \(240 \lt Q\) のとき、\(0\) 点
が与えられます。

Note

  • 出力を行うたびに、末尾に改行を入れて標準出力を flush してください。そうしなかった場合、ジャッジ結果は不定です。
  • ジャッジプログラムと、Alice として振る舞うあなたのプログラムと、Bob として振る舞うあなたのプログラムが同時に実行されます。実行時間・使用メモリはこれらの合計で計測されるため、実行時間・使用メモリには余裕を持ってください。

入出力例

Alice の入力Alice の出力Bob の入力Bob の出力説明
AliceBobはじめに \(\mathrm{Player}\) と \(T\) が標準入力から与えられます。
33
1Alice に対して \(X\) が標準入力から与えられます。はじめ \(x = 0\) です。
plusAlice が \(x\) に \(1\) を加算する操作を行います。\(x = 1\) となります。
plusBob に、Alice が行った操作が知らされます。
doubleBob が \(x\) を \(2\) 倍する操作を行います。\(x = 2\) となります。
doubleAlice に、Bob が行った操作が知らされます。
minusAlice が \(x\) から \(1\) を引く操作を行います。\(x = 1\) となります。
minusBob に、Alice が行った操作が知らされます。
answerBob が \(x\) と \(X\) が一致したことを報告する操作を行います。
\(x\) と \(X\) が一致しているため、ゲームは成功となります。
answerAlice に、Bob が行った操作が知らされます。
100\(2\) 回目のゲームが始まります。
Alice に対して \(X\) が標準入力から与えられます。はじめ \(x = 0\) です。
answerAlice が \(x\) と \(X\) が一致したことを報告する操作を行います。
\(x\) と \(X\) が一致していないため、ゲームは失敗となります。
answerBob に、Alice が行った操作が知らされます。
-1-1\(2\) 回目のゲームに失敗したため、Alice と Bob の両方に -1 が与えられます。
以降のゲームは行われないため、プログラムを終了させる必要があります。