#331. 取石子游戏

题目类型:交互型 时间限制:1000 ms 空间限制:512 MiB
输入文件:标准输入 输出文件:标准输出 答案检查器:Special Judge

这是一道交互题。

你和 OJ 君在玩取石子游戏。

有两堆石子,第一堆有 $a$ 个,第二堆有 $b$ 个($a \neq b$)。由你开始,你和 OJ 君轮流从中取石子。

每次取石子时,当前玩家可以选择剩余石子数量大于 $0$ 一堆,从中取走至少一个石子。

如果某个玩家取完石子后,两堆石子剩余的数量均为 $0$,则这个玩家获胜。

你的任务是在这个游戏中获胜。

时间和空间限制指你的程序的限制,交互器的限制会另外计算。如果你在程序中使用有条件退出的循环,可能会因为输出格式错误导致交互器直接退出,你的所有输入尝试都会失败(如同从文件读入时文件已经读完),从而导致退出循环的条件始终不满足,成为无限循环。


输入输出格式

这是一道交互题。你的程序的输出会用来生成接下来的输入。

  1. 首先,你的程序会读入一行以空格分隔的两个非负整数 $a$ 和 $b$,表示两堆石子开始时的数量。
  2. 由你开始,你需要输出一行两个值 $pos$ 和 $value$ 并以空格分隔,其中 $pos$ 是一个字符,可以是 a 或者 b,表示你准备取哪一堆石子;$value$ 是一个正整数,表示你准备取的数量。
  3. 当你输出一行后,如果两堆石子剩余数量均为 $0$,你的程序应该退出,这样你就通过了这个测试点,测试结束。
  4. 否则 OJ 君会进行他的操作,即你可以读入同样格式的一行,包含 $pos$ 和 $value$,表示 OJ 君如何取石子。
  5. 如果 OJ 君取完后,两堆石子剩余数量均为 $0$,你将得不到这个测试点的分数。
  6. 否则回到第 2 步,取石子游戏继续。

样例

possible input
3 5
a 2
b 1
possible output
b 2
b 2
a 1
explanation

开始时,第一堆有 $3$ 颗石子,第二堆有 $5$ 颗石子。

你先从第二堆(b)取走 $2$ 颗石子。作为回应,OJ 君从第一堆取走 $2$ 颗。接着,你继续从第二堆取走 $2$ 颗。OJ 君也从第二堆取走 $1$ 颗。现在只剩下第一堆有 $1$ 颗石子,你取走这颗石子取得胜利。


注意事项

除了开始时的输入,后续输入均为你提供对应输出后才能取得。由于输出会有缓存,你需要在每次结束输出后清除缓存,具体做法如下:

// 你的输出
// printf("Hello, world! ");
fflush(stdout);

或者

// 你的输出
// cout << "Hello, world! ";
cout << flush;

如果你使用 coutendl 也会自动清除缓存,即你可以认为

cout << "Hello, world! \n" << flush;

cout << "Hello, world! " << endl;

是等价的。

这道题的一个随机取石子的提交可参见这里(当然,如果你随机取石子,聪明的 OJ 君很容易获胜)。


限制与约定

$0 \leq a, b \leq 1000$,$a \neq b$

时间限制:$1\texttt{s}$

空间限制:$512\texttt{MB}$


下载