【不明出处】 棋盘问题

一道特别简单却错了的题。


棋盘问题
(a.cpp/c/pas)
【问题描述】
mxjoe 学长有一个 n*m 的棋盘,每个格子只有可能是黑色或白色。
Oxer 和 mxjoe 在玩一个游戏,每次寻找一个边长为 x 的正方形,其中每个格
子必须为黑色,然后将这些格子染白。
如果谁不能操作了,那么那个人就输了。
Oxer 喜欢质数。
mxjoe 喜欢 1,但讨厌 2。
因此他们规定, x 只可能是非 2 质数或者是 1。
现在他们想知道,如果他们都用最优策略进行游戏,谁会赢?
上帝规定 Oxer 先手。
【输入格式】
第一行输入一个正整数 T,表示测试组数
对于每一个数据,
第一行包括两个正整数 n, m
接下来的 n 行,每行包括 m 个数字 0 或 1,若这个数为 1,则表示该位置为黑色,
否则为白色。
【输出格式】
共 n 行。
对于每一组数据,
输出“ Oxer”或者“ mxjoe”(不包含引号)。
【输入样例】
1
2 3
1 1 0
0 0 1
【输出样例】
Oxer
【数据范围及约定】
对于 30%的数据, 1<=n,m<=3,
对于另外 20%的数据, T=1,

对于 100%的数据, 1<=n,m<=100,1<=T<=10。


一眼看上去,感觉一个限制条件很奇怪:x 只可能是非 2 质数或者是 1。进行了一个大胆的猜想:拿一个和拿一个正方形没有区别。进行几次验算,发现确实如此,事后补上证明:因为非2质数和1都是奇数,拿走奇数个之后一定轮到对方拿,所以没有区别。


#include<bits/stdc++.h>

using namespace std;

int a[110][110];

int main()
{
	freopen("a.in","r",stdin);
	freopen("a.out","w",stdout);
	int t;
	scanf("%d",&t);
	while (t)
	{
		t--;
		memset(a,0,sizeof(a));
		int m,n,tot=0;
		tot=0;
		tot=0;
		tot=0;
		scanf("%d%d",&n,&m);
		for (int i=1;i<=n;i++)
		{
			for (int j=1;j<=m;j++)
			{
				scanf("%d",&a[i][j]);
				if (a[i][j]==1)
				{
					tot++;
				}
			}
		}
		if (tot%2==0)
		{
			printf("mxjoe\n");
		}
		else
		{
			printf("Oxer\n");
		}
		
	}
	fclose(stdin);
	fclose(stdout);
	return 0;
}

重要的事情说三遍(代码已经说了),计数器一定要清零!!!




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值