luogu#P8174. [CEOI2021] Stones

[CEOI2021] Stones

题目背景

译自 CEOI2021 Day2 T1. Stones

题目描述

Ankica 终于抓住 Branko,但他拒绝给 Ankica 买报纸并且要求自己提出一个新的游戏因为上一个是不公平的。Ankica 故作天真地提出了另一个石子游戏,但 Branko 内心存疑,并决定完全改变它的规则。

游戏包含 NN 堆石子,其中第 ii 堆有 aia_i 个石子,玩家轮流移除一堆石子中的若干个,取到最后一个石子的玩家获胜。

但在该游戏中每个玩家从哪堆石子中取石子是由另一名玩家固定的。

具体来说,游戏的回合数从 11 开始每次递增,增量为 11,而游戏将会以如下方式进行:

  • 在奇数回合,Branko 将指定一个非空石子堆。Ankica 将移除这堆石子至少一个,至多所有石子。
  • 在偶数回合,Ankica 将指定一个非空石子堆。Branko 将移除这堆石子至少一个,至多所有石子。

作为专业的游戏玩家,在 Branko 摆完石子后,Ankica 很快意识到这个游戏对她有必胜策略。

如果你是 Ankica,你能否获胜呢?

交互方式

这是一道交互题,你的程序必须与官方给出的扮演 Branko 的程序交换信息。当然,你的程序应该扮演 Ankica 的角色并确保她能获胜。

你的程序应先从标准输入读入游戏的初始状态。初始状态有两行,第一行包含一个整数 NN ,第二行包含 NN 个空格隔开的整数,其中第 ii 个表示 aia_i,含义如题面所示。

你的程序应根据现在是奇数或偶数轮给出不同的输出,具体地:

在奇数轮:

  • 你的程序应先读入一个整数 kk。如果此时所有的石子堆都是空的,k=1k=-1,你应结束程序因为你已经输了。否则 k[1,N]k\in[1,N] ,代表你现在必须从第 kk 堆石子取走至少一个至多所有石子。保证第 kk 堆石子此时不为空。令当前第 kk 堆石子有 sks_k 个石子。
  • 你的程序应输出一行一个 [1,sk][1,s_k] 中的整数,代表你从第 kk 堆石子希望取走的石子个数,然后刷新缓冲区

在偶数轮:

  • 你的程序应先输出一个整数 kk然后刷新缓冲区。如果此时所有的石子堆都是空的,kk 应为 1-1,你应结束程序因为你已经赢了。否则 k[1,N]k\in[1,N],代表你希望 Branko 从第 kk 堆石子取石子。你应保证第 kk 堆石子此时不为空。令当前第 kk 堆石子有 sks_k 个石子。
  • 你的程序应读入一行一个 [1,sk][1,s_k] 中的整数,代表 Branko 从第 kk 堆石子取走的石子个数。

保证给出的初始状态使得无论 Branko 怎么操作你都有必胜策略。

交互样例1

输出 输入 解释
1\texttt{1} 游戏只有一堆石子
4\texttt{4} 这一堆石子堆包含 44 个石子
1\texttt1 Branko 只能指定 Ankica 从第一堆取石子
4\texttt4 Ankica 拿走第一堆所有石子
-1\texttt-1 现在没有剩余的石子,Ankica 获胜

交互样例2

输出 输入 解释
3\texttt{3} 游戏有三堆石子
1 1 5\texttt{1 1 5} 三堆石子依次包含 1,1,51,1,5 个石子
3\texttt{3} Branko 指定 Ankica 从第三堆取石子
5\texttt{5} Ankica 拿走第三堆所有石子
1\texttt{1} Ankica 指定 Branko 从第一堆取石子
1\texttt{1} Branko 只能拿走第一堆所有石子
2\texttt{2} Branko 指定 Ankica 从第二堆取石子
1\texttt{1} Ankica 拿走第二堆所有石子
-1\texttt{-1} 现在没有剩余的石子,Ankica 获胜

提示

子任务

M=max{a1,a2,,aN}M=\max\{a_1,a_2,\dots,a_N\}

所有测试点均满足 1N,M5001\leq N,M\leq 500

各子任务的约束条件如下:

子任务 分值 约束
11 1212 1N,M71\leq N,M\leq 7
22 1313 1N121\leq N\leq 121M5001\leq M\leq 500
33 1515 1N,M5001\leq N,M\leq 500,且 i,j[1,N],ai=aj\forall i,j\in[1,N],a_i=a_j
44 6060 1N,M5001\leq N,M\leq 500