【gmoj3552】【7.16提高B组模拟赛T1】并行博弈【博弈】

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
链接:并行博弈

分析

一开始只想着去骗分
结果发现是一道zz题
对于一个棋盘来说,其实只用关心一个关键点,就是左上角那个点。
因为不管选择哪个点,最左上角那个点一定会被翻转(每次操作翻转左上方所有点)
所以不管其他的怎么操作,只要一个人能把左上角的点点成白色,那下一个人必然会将它变成黑色,第一个人又可以选左上角的点。如此循环,另一个人必败。、

所以每个棋盘只需要看一开始左上角的点是什么颜色,黑色则先手必胜,白色则先手必败。

怎么处理多个棋盘?
因为如果这一盘你赢了,对方下一盘就变成先手了,反之亦然。所以说总的胜负其实跟先手必胜或先手必败棋盘的奇偶性有关。
有奇数个先手必胜棋盘则先手必胜,有偶数个先手必胜棋盘则先手必败。
判断这个可以用异或实现。

上代码

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;

int t,k,n,m,a[500][500],ans;

int main()
{
	cin>>t;
	while(t--)
	{
		ans=0;
		cin>>k;
		while(k--)
		{
			cin>>n>>m;
			for(int i=1;i<=n;i++)
			{
				for(int j=1;j<=m;j++)
				{
					cin>>a[i][j];
				}
			}
			ans=ans^a[1][1];
		}
		if(ans) cout<<"lyp win"<<endl;
		else cout<<"ld win"<<endl;
	}
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值