题目链接:点击打开链接
题目大意:
下象棋,
黑方只有“将”棋;
红方有“車”,“马”,“炮”,“帅”四种棋;
现在规则是:
1.马不能撇脚;
2.两“将”不能相对;
3.炮需要隔一个子才能打另一个子;
4.車打人中间不能隔子
问红方能不能把黑方“将死”,能输出“YES”,不能输出“NO”;
解:
一个比较麻烦的模拟,注意细节!注意细节!注意细节才能过!
代码:
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstdlib>
#include <cstring>
using namespace std;
char borad[15][15];
int hx[9]={0,-1,-2,-2,-1,1,2,2,1},hy[9]={0,-2,-1,1,2,2,1,-1,-2};
int hxx[9]={0,-1,-1,-1,-1,1,1,1,1},hyy[9]={0,-1,-1,1,1,1,1,-1,-1};
int gx[5]={0,-1,0,1,0},gy[5]={0,0,-1,0,1};
int Hs(int x,int y)
{
for(int i=1;i<=8;i++)
{
int nx=x+hx[i],ny=y+hy[i];
int zx=x+hxx[i],zy=y+hyy[i];
if(nx<1||nx>10||ny<1||ny>9)continue;
if(borad[nx][ny]=='H')
{
if(borad[zx][zy]=='.')return 1;
}
}
return 0;
}
int judge(int x,int y)
{
int flg=0;
for(int i=x+1;i<=10;i++) //往下着
{
if(borad[i][y]=='R')
{
int p=0;
for(int j=i-1;j>x;j--)
{
if(borad[j][y]=='.')continue;
else p=1;
}
if(p==0)return 1;
}
else if(borad[i][y]=='C')
{
int p=0;
for(int j=i-1;j>x;j--)
{
if(borad[j][y]!='.')p++;
}
if(p==1)return 1;
}
else if(borad[i][y]=='G')
{
int p=0;
for(int j=i-1;j>x;j--)
{
if(borad[j][y]=='.')continue;
else p=1;
}
if(p==0)return 1;
}
}
for(int i=x-1;i>=1;i--) //向上找
{
if(borad[i][y]=='R')
{
int p=0;
for(int j=i+1;j<x;j++)
{
if(borad[j][y]=='.')continue;
else p=1;
}
if(p==0)return 1;
}
else if(borad[i][y]=='C')
{
int p=0;
for(int j=i+1;j<x;j++)
{
if(borad[j][y]!='.')p++;
}
if(p==1)return 1;
}
}
for(int i=y+1;i<=9;i++) //向右找
{
if(borad[x][i]=='R')
{
int p=0;
for(int j=i-1;j>y;j--)
{
if(borad[x][j]=='.')continue;
else p=1;
}
if(p==0)return 1;
}
else if(borad[x][i]=='C')
{
int p=0;
for(int j=i-1;j>y;j--)
{
if(borad[x][j]!='.')p++;
}
if(p==1)return 1;
}
}
for(int i=y-1;i>=1;i--) //向左找
{
if(borad[x][i]=='R')
{
int p=0;
for(int j=i+1;j<y;j++)
{
if(borad[x][j]=='.')continue;
else p=1;
}
if(p==0)return 1;
}
else if(borad[x][i]=='C')
{
int p=0;
for(int j=i+1;j<x;j++)
{
if(borad[x][j]!='.')p++;
}
if(p==1)return 1;
}
}
return Hs(x,y);
}
void init()
{
for(int i=1;i<=10;i++)
for(int j=1;j<=9;j++)
borad[i][j]='.';
}
void show()
{
for(int i=1;i<=10;i++)
{for(int j=1;j<=9;j++)printf("%c",borad[i][j]);
cout<<endl;}
}
int main()
{
int n,x,y;
while(~scanf("%d%d%d",&n,&x,&y))
{
if(!n&&!x&&!y)break;
init();
//borad[x][y]='*';
while(n--)
{
char q[3];int a,b;
scanf("%s%d%d",q,&a,&b);
borad[a][b]=q[0];
}
//show();
int flg=1;
for(int i=1;i<=4;i++)
{
int nx=x+gx[i],ny=y+gy[i];
if(nx<1||nx>3||ny<4||ny>6)continue;
if(judge(nx,ny))continue;
else
{
flg=0;
break;
}
}
if(flg==0)cout<<"NO"<<endl;
else cout<<"YES"<<endl;
}
return 0;
}