牛客小白月赛2 E题 是是非非 (尼姆博弈)
题目链接:https://www.nowcoder.com/acm/contest/86/E
解题思路:由尼姆博弈我们可以知道,如果所有堆的石子数量异或为0,那么先手必败,否则先手必胜。
由异或我们可以知道,x异或两次相同的值,x值不变。
代码:
1 #include<iostream>
2 #include<stdio.h>
3 using namespace std;
4 int a[100500];
5 int main(){
6 int n,q;
7 cin>>n>>q;
8 int sum=0;
9 for(int i=1;i<=n;i++){
10 scanf("%d",a+i);
11 sum=sum^a[i];
12 }
13 while(q--){
14 int x,y;
15 scanf("%d%d",&x,&y);
16 sum=sum^a[x];
17 a[x]=y;
18 sum=sum^a[x];
19 if(sum==0){
20 cout<<"Li"<<endl;
21 }else{
22 cout<<"Kan"<<endl;
23 }
24 }
25 return 0;
26 }