loj#P3595. 「CEOI2021」石子游戏

「CEOI2021」石子游戏

题目描述

题目译自 CEOI 2021 Day2 T1「Stones

当 Ankica 最终抓到了 Branko 的时候,他拒绝给她卖报纸,并且要求他们再玩一个不同的游戏,因为上一个游被某些申必力量操控了。Ankica 也没想设套,于是建议玩一个用石头玩的游戏,但 Branko 恰好怀疑这个游戏,并决定彻底改变它的规则。

这个游戏需要 NN 堆石子来玩,第 ii 堆中有 aia_i 个石子。玩家轮流从一堆里拿走一些数量的石子。拿走最后一个石子的玩家获胜。

问题是,在某轮中,这个玩家必须从另一个玩家指定的石子堆中拿走一定数量的石子。

更确切地说,令轮数从 11 开始依次增加,这个游戏按如下步骤进行:

  • 奇数轮由 Branko 指定一堆非空的石子堆开始。然后 Ankica 从这个石子堆中拿走至少一个(至多全部)石子。
  • 偶数轮由 Ankica 指定一堆非空的石子堆开始。然后 Branko 从这个石子堆中拿走至少一个(至多全部)石子。

Branko 找来了一些石子,把它们分为了一些堆,然后他们开始游戏。作为一个专业玩家,Ankica 迅速意识到这个石子的初始分配方式会让她获胜,即,无论 Branko 在剩下的游戏中如何操作,Ankica 都会获胜。

你可以在模拟 Ankica 的情况下赢得游戏吗?

交互过程

这是一道交互题,你的程序必须和裁判编写模拟 Branko 操作的程序通讯。当然,你的程序应该模拟 Ankica 的操作,并保证她会赢得游戏。

你的程序必须首先从标准输入中读取游戏的初始状态。初始状态由两行描述。第一行包含一个整数 NN,意义如题目描述,第二行有 NN 个正整数 a1,a2,,aNa_1,a_2,\ldots,a_N,由一个空格隔开,意义如题目描述。

现在,游戏开始。请记住,你的程序要模拟 Ankica 的操作,这意味着它在奇数轮和偶数轮中的操作是不一样的。

在奇数轮时:

  • 你的程序应首先读取一个整数 kk。如果此时所有石子堆都是空的,那么 kk 就会等于 1-1。接着你应该结束程序,因为这意味着游戏结束,并且你已经输了。否则 k (1kN)k\ (1\le k\le N) 表示你(Ankica)必须从第 kk 堆石子中取走一些石子。保证此时第 kk 堆石子是非空的。令此时第 kk 堆中石子的数量为 sks_k
  • 接着你的程序需要输出一个整数 x (1xsk)x\ (1\le x\le s_k),表示你的程序希望从第 kk 堆石子拿走的石子个数,之后清理输出。

在偶数轮时:

  • 你的程序必须首先输出一个整数 ll 并清理输出。如果此时所有堆石子都空了,那么 ll 必须等于 1-1,然后你应该停止程序,因为这意味游戏结束,并且你赢了。否则 l (1lN)l\ (1\le l\le N) 表示你让 Branko 在第 ll 堆中取石子。此时第 ll 堆石子不能为空。令此时第 ll 堆中石子的数量为 sls_l
  • 接着你的程序需要读入一个整数 y (1ysl)y\ (1\le y\le s_l),表示 Branko 从第 ll 堆石子中取出的石子个数。

保证游戏的初始状态可以让你(Ankica)在无论 Branko 如何操作的情况下获胜。

样例交互 1

输出 输入 注释
11
44
只有一堆石子,这堆石子中有 44 个石子
11 Branko 别无选择,只能让 Ankica 从第一堆中拿石子
44 Ankica 拿走了第一堆中的全部石子
1-1 最后石子被拿完了,Ankica 获胜

样例交互 2

输出 输入 注释
33
1 1 51\ 1\ 5
有三堆石子,石子数量分别为 1,1,51,1,5
33 Branko 让 Ankica 从第 33 堆中拿至少一个石子
55 Ankica 拿走了第三堆中的全部石子
11 Ankica 让 Branko 从第 11 堆中拿至少一个石子
11 Branko 从第一堆中拿走了仅有的一个石子
22 Branko 让 Ankica 从第 22 堆中拿至少一个石子
11 Ankica 从第二堆中拿走了仅有的一个石子
1-1 最后石子被拿完了,Ankica 获胜

数据范围与提示

M=max(a1,a2,,aN)M=\max(a_1,a_2,\ldots,a_N)

子任务编号 附加限制 分值
11 1N,M71\le N,M\le 7 1212
22 1N12,1M5001\le N\le 12,1\le M\le 500 1313
33 1N,M5001\le N,M\le 500,且对于所有 1i,jn1\le i,j\le n,都有 ai=aja_i=a_j 1515
44 1N,M5001\le N,M\le 500 6060