#P15849. [Roi2012 Regional]Game with Numbers数字游戏
[Roi2012 Regional]Game with Numbers数字游戏
题目描述
今天数学课上,Petya 和 Vasya 学习了等差数列的概念。
公差为 的等差数列是一个序列:
其中任意相邻两项之差都等于 。例如,序列
是一个公差为 的等差数列。
课后,Petya 和 Vasya 发明了一种新的数字游戏。
篮子里有 个筹码,筹码上写着互不相同的整数:
游戏过程中,玩家轮流从篮子中取出筹码放到桌上。Petya 先手。每次操作如下:
- 当前玩家从篮子中取出一个筹码放到桌上;
- 然后他必须说出一个整数 ,使得当前桌面上所有筹码上的数字都是某个公差为 的等差数列中的项。
注意,桌面上的数字不要求是该等差数列中连续的项。
例如,如果桌面上的数字是 ,那么可以说出 ,因为这些数字都是等差数列
中的项。
如果玩家无法行动,则他失败。无法行动可能有两种原因:
- 篮子里已经没有筹码;
- 无论从篮子里拿哪一个筹码,放到桌上后都无法找到满足条件的 。
例如,若篮子中的数字为 ,则 Petya 可以获胜。他第一步应放下数字 。此时他有很多选择,例如可以说 。
接下来 Vasya 有两种主要选择:
- Vasya 放下 ,并说 。然后 Petya 放下 ,也说 。此时桌面上为 ,篮子中只剩 。Vasya 无法再放下 ,因为此后找不到合法的 ,所以 Vasya 输。
- Vasya 放下 ,也可以说 。然后 Petya 放下 ,也说 。Vasya 同样会面对桌面为 、篮子中只剩 的局面,因此输掉游戏。
注意,Petya 的其他第一步都会导致失败。如果他先放 ,Vasya 可以放 ,然后 Petya 无法行动;如果他先放 或 ,Vasya 可以放 ,然后 Petya 也无法行动。
请编写程序,根据给定的筹码数量 和数字 ,判断 Petya 是否可以保证获胜,并找出所有能使 Petya 必胜的第一步。
输入格式
第一行包含整数 。
第二行包含 个互不相同的整数 。
相邻整数之间恰好用一个空格分隔。
输出格式
第一行输出整数 ,表示 Petya 可以选择的必胜第一步数量。
如果 Vasya 无论如何都能获胜,则输出 0。
第二行输出 个互不相同的整数,表示所有必胜的第一步数字。若 ,可以不输出第二行。
一个数字称为必胜数字,如果 Petya 第一步放下写有该数字的筹码后,无论 Vasya 如何行动,Petya 都能获胜。
样例 1
输入
4
2 3 5 7
输出
1
3
样例 2
输入
2
2 4
输出
0
样例解释
第一个样例见题目描述。
第二个样例中,无论 Petya 第一步放哪一个筹码,Vasya 都可以放下另一个筹码,随后 Petya 因篮子为空无法行动,因此 Petya 必败。