题目链接:http://poj.org/problem?id=2495
思路:棋盘的完美覆盖问题
将8 X 8 的棋盘交替的换上值 1 、2;如果我们剪掉两个方格;
a)两个方格值相同,假设为1;
那么: 31个值为二和31个值为一 =/= 32个值为二和30个值为一。
b)两个方格值不相同(满足完美覆盖)
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int map[9][9];
void Init()
{
memset(map,0,sizeof(map));
int i,j;
map[1][1]=1;
for(i=2;i<=8;i++)
{
if(map[1][i-1]==1) map[1][i]=2;
else map[1][i]=1;
}
for(i=1;i<=8;i++)
{
for(j=2;j<=8;j++)
{
if(map[j-1][i]==1) map[j][i]=2;
else map[j][i]=1;
}
}
}
int main()
{
int i,cas,x1,y1,x2,y2;
Init();
scanf("%d",&cas);
for(i=1;i<=cas;i++)
{
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
int t=(map[x1][y1]!=map[x2][y2]);
printf("Scenario #%d:\n%d\n\n",i,t);
}
return 0;
}