#P8174. [CEOI2021] Stones
[CEOI2021] Stones
题目背景
译自 CEOI2021 Day2 T1. Stones。
题目描述
Ankica 终于抓住 Branko,但他拒绝给 Ankica 买报纸并且要求自己提出一个新的游戏因为上一个是不公平的。Ankica 故作天真地提出了另一个石子游戏,但 Branko 内心存疑,并决定完全改变它的规则。
游戏包含 堆石子,其中第 堆有 个石子,玩家轮流移除一堆石子中的若干个,取到最后一个石子的玩家获胜。
但在该游戏中每个玩家从哪堆石子中取石子是由另一名玩家固定的。
具体来说,游戏的回合数从 开始每次递增,增量为 ,而游戏将会以如下方式进行:
- 在奇数回合,Branko 将指定一个非空石子堆。Ankica 将移除这堆石子至少一个,至多所有石子。
- 在偶数回合,Ankica 将指定一个非空石子堆。Branko 将移除这堆石子至少一个,至多所有石子。
作为专业的游戏玩家,在 Branko 摆完石子后,Ankica 很快意识到这个游戏对她有必胜策略。
如果你是 Ankica,你能否获胜呢?
交互方式
这是一道交互题,你的程序必须与官方给出的扮演 Branko 的程序交换信息。当然,你的程序应该扮演 Ankica 的角色并确保她能获胜。
你的程序应先从标准输入读入游戏的初始状态。初始状态有两行,第一行包含一个整数 ,第二行包含 个空格隔开的整数,其中第 个表示 ,含义如题面所示。
你的程序应根据现在是奇数或偶数轮给出不同的输出,具体地:
在奇数轮:
- 你的程序应先读入一个整数 。如果此时所有的石子堆都是空的,,你应结束程序因为你已经输了。否则 ,代表你现在必须从第 堆石子取走至少一个至多所有石子。保证第 堆石子此时不为空。令当前第 堆石子有 个石子。
- 你的程序应输出一行一个 中的整数,代表你从第 堆石子希望取走的石子个数,然后刷新缓冲区。
在偶数轮:
- 你的程序应先输出一个整数 ,然后刷新缓冲区。如果此时所有的石子堆都是空的, 应为 ,你应结束程序因为你已经赢了。否则 ,代表你希望 Branko 从第 堆石子取石子。你应保证第 堆石子此时不为空。令当前第 堆石子有 个石子。
- 你的程序应读入一行一个 中的整数,代表 Branko 从第 堆石子取走的石子个数。
保证给出的初始状态使得无论 Branko 怎么操作你都有必胜策略。
交互样例1
输出 | 输入 | 解释 |
---|---|---|
游戏只有一堆石子 | ||
这一堆石子堆包含 个石子 | ||
Branko 只能指定 Ankica 从第一堆取石子 | ||
Ankica 拿走第一堆所有石子 | ||
现在没有剩余的石子,Ankica 获胜 |
交互样例2
输出 | 输入 | 解释 |
---|---|---|
游戏有三堆石子 | ||
三堆石子依次包含 个石子 | ||
Branko 指定 Ankica 从第三堆取石子 | ||
Ankica 拿走第三堆所有石子 | ||
Ankica 指定 Branko 从第一堆取石子 | ||
Branko 只能拿走第一堆所有石子 | ||
Branko 指定 Ankica 从第二堆取石子 | ||
Ankica 拿走第二堆所有石子 | ||
现在没有剩余的石子,Ankica 获胜 |
提示
子任务
令 。
所有测试点均满足 。
各子任务的约束条件如下:
子任务 | 分值 | 约束 |
---|---|---|
, | ||
,且 | ||