loj#P3595. 「CEOI2021」石子游戏
「CEOI2021」石子游戏
题目描述
题目译自 CEOI 2021 Day2 T1「Stones」
当 Ankica 最终抓到了 Branko 的时候,他拒绝给她卖报纸,并且要求他们再玩一个不同的游戏,因为上一个游被某些申必力量操控了。Ankica 也没想设套,于是建议玩一个用石头玩的游戏,但 Branko 恰好怀疑这个游戏,并决定彻底改变它的规则。
这个游戏需要 堆石子来玩,第 堆中有 个石子。玩家轮流从一堆里拿走一些数量的石子。拿走最后一个石子的玩家获胜。
问题是,在某轮中,这个玩家必须从另一个玩家指定的石子堆中拿走一定数量的石子。
更确切地说,令轮数从 开始依次增加,这个游戏按如下步骤进行:
- 奇数轮由 Branko 指定一堆非空的石子堆开始。然后 Ankica 从这个石子堆中拿走至少一个(至多全部)石子。
- 偶数轮由 Ankica 指定一堆非空的石子堆开始。然后 Branko 从这个石子堆中拿走至少一个(至多全部)石子。
Branko 找来了一些石子,把它们分为了一些堆,然后他们开始游戏。作为一个专业玩家,Ankica 迅速意识到这个石子的初始分配方式会让她获胜,即,无论 Branko 在剩下的游戏中如何操作,Ankica 都会获胜。
你可以在模拟 Ankica 的情况下赢得游戏吗?
交互过程
这是一道交互题,你的程序必须和裁判编写模拟 Branko 操作的程序通讯。当然,你的程序应该模拟 Ankica 的操作,并保证她会赢得游戏。
你的程序必须首先从标准输入中读取游戏的初始状态。初始状态由两行描述。第一行包含一个整数 ,意义如题目描述,第二行有 个正整数 ,由一个空格隔开,意义如题目描述。
现在,游戏开始。请记住,你的程序要模拟 Ankica 的操作,这意味着它在奇数轮和偶数轮中的操作是不一样的。
在奇数轮时:
- 你的程序应首先读取一个整数 。如果此时所有石子堆都是空的,那么 就会等于 。接着你应该结束程序,因为这意味着游戏结束,并且你已经输了。否则 表示你(Ankica)必须从第 堆石子中取走一些石子。保证此时第 堆石子是非空的。令此时第 堆中石子的数量为 。
- 接着你的程序需要输出一个整数 ,表示你的程序希望从第 堆石子拿走的石子个数,之后清理输出。
在偶数轮时:
- 你的程序必须首先输出一个整数 并清理输出。如果此时所有堆石子都空了,那么 必须等于 ,然后你应该停止程序,因为这意味游戏结束,并且你赢了。否则 表示你让 Branko 在第 堆中取石子。此时第 堆石子不能为空。令此时第 堆中石子的数量为 。
- 接着你的程序需要读入一个整数 ,表示 Branko 从第 堆石子中取出的石子个数。
保证游戏的初始状态可以让你(Ankica)在无论 Branko 如何操作的情况下获胜。
样例交互 1
输出 | 输入 | 注释 |
---|---|---|
只有一堆石子,这堆石子中有 个石子 | ||
Branko 别无选择,只能让 Ankica 从第一堆中拿石子 | ||
Ankica 拿走了第一堆中的全部石子 | ||
最后石子被拿完了,Ankica 获胜 |
样例交互 2
输出 | 输入 | 注释 |
---|---|---|
有三堆石子,石子数量分别为 | ||
Branko 让 Ankica 从第 堆中拿至少一个石子 | ||
Ankica 拿走了第三堆中的全部石子 | ||
Ankica 让 Branko 从第 堆中拿至少一个石子 | ||
Branko 从第一堆中拿走了仅有的一个石子 | ||
Branko 让 Ankica 从第 堆中拿至少一个石子 | ||
Ankica 从第二堆中拿走了仅有的一个石子 | ||
最后石子被拿完了,Ankica 获胜 |
数据范围与提示
令 。
子任务编号 | 附加限制 | 分值 |
---|---|---|
,且对于所有 ,都有 | ||