jzoj3552WC2014模拟2.6结论题并行博弈

Posted SSL_ZZL

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jzoj3552WC2014模拟2.6结论题并行博弈相关的知识,希望对你有一定的参考价值。

题面

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

第一行一个数T,表示数据组数。

接下来T组数据,对于每一组数据:

接下来一行一个数K,表示有多少个游戏在进行中,

接下来K部分,每部分第一行两个数n,m表示棋盘大小,

接下来n行,每行m个数,0 表示这个棋子是白色,1表示为黑色,第一行第一列代表棋子坐标(1,1)。

Output

对于每一组数据,换行输出先手必胜(“lyp win”)还是后手必胜(“ld win”),输出不包含引号。

Sample Input

1
1
2 2
1 1
1 0

Sample Output

lyp win

Data Constraint

对于10%的测试数据,一定是ld win;
对于30%的测试数据,n * m * K ≤ 20;
对于50%的测试数据,n * m ≤ 20;
对于所有的测试数据,n * m * K ≤ 10^5,T ≤ 20。


解题思路

“两个聪明绝顶的人”(doge
先考虑只有一场游戏
当(1,1)点是黑色,先手赢;反之,后手赢

  • 证明:当(1,1)点是黑色,先手点掉黑色;后手不管点其他的哪个点,(1,1)都会变成黑色,于是就可以一直点
    到最后棋盘就会变成只剩(1,1)这一个黑点,由先手点掉

再考虑多场游戏
当 当前棋盘 先手赢时,那么TA点掉最后一个点,下一盘游戏TA就是后手了,继续套用上面 一场游戏 的结论

//tips
由于异或过于巧妙,这里给出所有情况 (dalao无需在意)

  • k = 0, x = 1:k ^ x = 1(上盘lyp赢,在这盘先手变成后手;x表示这盘(1,1)为黑点,先手赢;ld赢,那么这盘lyp输(k = 1))
  • k = 0, x = 0:k ^ x = 0(上盘lyp赢,在这盘先手变成后手;白点,后手赢;lyp赢(k = 0))
  • k = 1, x = 1:k ^ x = 0(上盘lyp输,在这盘是先手;黑点,先手赢;lyp赢)
  • k = 1, x = 0:k ^ x = 1(lyp先手;白点,后手赢;lyp输)

md,我们就有个叫lyp的,写起来巨奇怪


Code

#include <iostream>
#include <cstdio>

using namespace std;

int main() {
	int T, n, m, x, k;
	scanf("%d", &T);
	while(T--) {
		scanf("%d", &k);
		int ok = 0;
		while(k--) {
			scanf("%d %d", &n, &m);
			for(int i = 1; i <= n; i++)
				for(int j = 1; j <= m; j++) {
					scanf("%d", &x);
					if(i == 1 && j == 1) 
						ok = ok xor x;  
				}
		}
		if(ok)printf("lyp win\\n");
			else printf("ld win\\n");
	}
}

以上是关于jzoj3552WC2014模拟2.6结论题并行博弈的主要内容,如果未能解决你的问题,请参考以下文章

[考试反思]1022csp-s模拟测试82:奇异

jzoj3539清华集训2014模拟数论高斯消元折射伤害

沙雕打表结论题

第三讲 数学与简单DP完结

[JZOJ3402] GDOI2014模拟Pty的字符串

[JZOJ3615]NOI2014模拟数列(平面几何+二维线段树)