本文共 1072 字,大约阅读时间需要 3 分钟。
Time Limit: 10 Sec Memory Limit: 256 MB Submit: 42 Solved: 29 [ ][ ][ ] Description
lyp和ld在一个n*m的棋盘上玩翻转棋,游戏棋盘坐标假设为(x, y),1 ≤ x ≤ n,1 ≤ y ≤ m,这个游戏的游戏的的游戏规则如下:
每次可以操作坐标为 (x, y) 的棋子,要求棋子 (x, y) 必须是黑色,并且同时翻转所有棋子坐标 (x’, y’) 满足 x’≤x, y’≤y。
lyp觉得这样还不够过瘾,于是乎他打算同时玩 k 个这样的游戏, 每次可以对其中某一个游戏进行操作,lyp先手,ld后手,两人轮流进行操作,最后无法进行操作的人判输,现在给你这个游戏的局面,要求输出是先手必胜(“lyp win”)还是后手必胜(“ld win”)。
Input
接下来K部分,每部分第一行两个数n,m表示棋盘大小,
接下来n行,每行m个数,0 表示这个棋子是白色,1表示为黑色,第一行第一列代表棋子坐标(1,1)。
Output
对于每一组数据,换行输出先手必胜(“lyp win”)还是后手必胜(“ld win”),输出不包含引号。
Sample Input
Sample Output
为什么这么水的题没人写。。
只要(1,1)是黑色那么先手必胜,否则先手必败
证明很简单:
很显然每个人无论怎么操作都一定会改变格子(1,1)的颜色,而当面对全白色的人必败,证毕
而这题是多个棋盘,那就和尼姆博奕一样么,将所有结果异或起来就ok了
用gets()不要太快,直接从1000ms+变成76ms
#include char str[10005];int main(void){ int T, k, n, m, i, x, ans; scanf("%d", &T); while(T--) { ans = 0; scanf("%d", &k); while(k--) { scanf("%d%d%d", &n, &m, &x); ans ^= x; for(i=1;i<=n;i++) gets(str+1); } if(ans) printf("lyp win\n"); else printf("ld win\n"); } return 0;}
转载地址:http://fmmgf.baihongyu.com/