东华大学2020年程序设计竞赛F题:https://ac.nowcoder.com/acm/contest/5891/F
首先观察发现每次改变某个串,该串的1的数量都会恰变动1。因此统计1的数量。将题目改为每次改变若干串中1的数量(不能一直+1),最后所有串都为0时移动的人输。
思路和拿石子相同:尽量塑造对称的情况。第一轮时变动所有的1数量为奇数的串,然后模仿对手的操作即可。因此如果一开始所有串1数量全为偶数,则后手必胜。
应该属于比较简单的NIM游戏。
#include<stdio.h> int main() { int t; char c; int x,add; int p[11]; scanf("%d",&t); while(t--) { for(add=0;add<11;add++) p[add]=0; scanf("%d",&x); c=getchar(); for(add=1;add<=x;) { c=getchar(); if(c==10) { add++; } else { p[add]+=c-'0'; } } for(add=1;add<=x;add++) { //printf("%d ",p[add]); if(p[add]%2!=0) break; } if(add==x+1) printf("kgNB\n"); else printf("sdzNB\n"); } return 0; }