比赛时看错题了。。看出每次只能选择一个串,当时想这不是公平组合游戏水题嘛。。
直接SG函数一搞就行:
显然全0先手必败。
两个操作:1操作是改变1数量的奇偶,2操作并不能改变奇偶(因为2操作变成1,我再把1变回去,相当于没有这一步操作)
所以刚开始一个串,1的个数是奇数,则先手必胜即 SG=1 否则先手必败SG=0。
然后SG异或起来即可。。
但其实这一题是每次任选多个串。。
那其实也很简单,只要刚开始存在一个串使得SG[i]=1 我先手把所有SG=1的变成SG=0. 那么后手一定必败。
否则,刚开始全部SG=0,我先手一定必败。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define ls (o<<1)
#define rs (o<<1|1)
#define pb push_back
const double PI= acos(-1.0);
const int M =2e3+7;
char s[M];
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
int t;
cin>>t;
while(t--)
{
int n;
cin>>n;
int tp=0;
for(int i=1;i<=n;i++)
{
cin>>s;
int sm=0;
int l=strlen(s);
for(int j=0;j<l;j++)
{
if(s[j]=='1')
sm++;
}
if(sm&1)tp++;
}
if(tp)cout<<"sdzNB"<<endl;
else cout<<"kgNB"<<endl;
}
return 0;
}