游戏
题目大意
皇后被放置在棋盘上的某个位置,两人轮流移动,玩家1先移。每次移动玩家可以把皇后向左边移动若干步,或者向下面移动若干步,或者沿着左下方的斜线移动若干步。
谁把皇后移到左下角就获胜。
有多组数据。
样例输入
6
2 4
样例输出
2
数据范围
30%的数据:N<=500
50%的数据: N<=2000
80%的数据:N<=10000
100%的数据:N<=100000 1<=I,J<=N
思路
这一道题是一道找规律的题,规律是这样子的:
其中一个坐标要增加的数字是1,2,3,4,5,6,7……,而本身的数字就是在增加的一串数字,但它不能被前面的数字相加而成。
代码
#include <cstdio>
#include <cstring>
using namespace std;
int n,x,y;
int a[100010];
int main()
{
//freopen("game.in","r",stdin);
//freopen("game.out","w",stdout);
scanf("%d",&n);//读入
while (n)
{
scanf("%d%d",&x,&y);//读入
memset(a,0,sizeof(a));//初始化
y=n-y+1;//求出从下向上的
int j=0;
bool p=0;
for(int i=1;i+j<=n;++i)
if(!a[i])//有没有被合成过
{
a[i]=1;
if((x==i&&y==i+j)||(x==i+j&&y==i))//符不符合
{
printf("2\n");//输出
p=1;//标记
break;
}
a[i+j]=1;//记录
j++;
}
if(!p) printf("1\n");//输出
n=0;
scanf("%d",&n);//读入
}
//fclose(stdin);
//fclose(stdout);
return 0;
}