题目地址:
https://www.acwing.com/problem/content/4195/
有一种有趣的游戏,玩法如下:
玩家:
2
2
2人;
道具:
N
N
N堆石子,每堆石子的数量分别为
X
1
,
X
2
,
…
,
X
N
X_1,X_2,…,X_N
X1,X2,…,XN;
规则:
1、游戏双方轮流取石子;
2、每人每次选一堆石子,并从中取走若干颗石子(至少取 1
颗);
3、所有石子被取完,则游戏结束;
4、如果轮到某人取时已没有石子可取,那此人算负。
假如两个游戏玩家都非常聪明,问谁胜谁负?
输入格式:
第一行,一个整数
N
N
N;
第二行,
N
N
N个空格间隔的整数
X
i
X_i
Xi,表示每一堆石子的颗数。
输出格式:
输出仅一行,一个整数,若先手获胜输出win
,后手获胜输出lose
。
数据范围:
1
≤
N
≤
50000
1≤N≤50000
1≤N≤50000
1
≤
X
i
≤
1
0
5
1≤X_i≤10^5
1≤Xi≤105
Nim游戏,参考https://blog.csdn.net/qq_46105170/article/details/114006771。代码如下:
#include <iostream>
using namespace std;
int n, res;
int main() {
scanf("%d", &n);
while (n--) {
int x;
scanf("%d", &x);
res ^= x;
}
res ? puts("lose") : puts("yes");
}
时间复杂度 O ( N ) O(N) O(N),空间 O ( 1 ) O(1) O(1)。