Step1 Problem:
元宵节到了,cyk 表示对 UMR 不服,于是他们进行了一场游戏:
- 他们面前有 n 个数,玩家轮流每次从这 n 个数中挑选出一个数拿走。
- 玩家选取的数字大小不能超过上一次玩家所拿的数的大小(譬如,上一个玩家拿了 3,那么下一次玩家只能选择 3, 2, …)。
- 当一名玩家无法挑选(没有数字了,或者剩下的数字都比上次玩家挑选的大)的时候则该玩家输掉比赛。
今天的比赛是 UMR 先手,两个人都足够聪明,然后 UMR 能不能够赢得比赛呢?
Step2 Ideas:
如果最小的数的个数是奇数,那么我拿了其中一个,就变成了偶数个。那么必胜。
如果最小的数的个数是偶数,如果我拿最小的数。那么必败。
如果我先手,我想必胜,那么我们应该到了对方的状态必败。所以我们应该先手后让最小的数的个数是偶数,这样对方必败。
Step3 Code:
#include<bits/stdc++.h>
using namespace std;
const int N = 1e3+100;
int vis[N];
int main()
{
int n;
while(~scanf("%d", &n))
{
int num, i;
memset(vis, 0, sizeof(vis));
for(i = 0; i < n; i++) {
scanf("%d", &num);
vis[num]++;
}
for(i = 1; i <= 1000; i++) {
if(vis[i]&1) break;//如果是奇数,那么我拿后,可以让最小的数的个数是偶数,那么我必胜。
}
if(i <= 1000) printf("a ha ! cyk , too young too simple sometimes native !\n");
else printf("en heng UMR , you also have today !\n");
}
}