水题
读入炮,马,将,车
判断是否能将军
模拟一下所有会被将军的位置即可
#include "stdio.h"
#include "string.h"
#include "math.h"
#include "stdlib.h"
struct comp
{
int x,y;
char ch[10];
} data[10010];
int hash[101][101],map[101][101];
int judge(int x,int y)
{
if (x<1 || x>10 || y<1 || y>9) return 0;
return 1;
}
int judge1(int x,int y)
{
if (x<1 || x>3 || y<4 || y>6) return 0;
return 1;
}
int main()
{
int mark,ok,n,x,y,x1,y1,i,j;
while (scanf("%d%d%d",&n,&x,&y)!=EOF)
{
if (x+n+y==0) break;
memset(hash,0,sizeof(hash));
memset(map,0,sizeof(map));
for (i=1;i<=n;i++)
{
scanf("%s%d%d",data[i].ch,&data[i].x,&data[i].y);
map[data[i].x][data[i].y]=1;
}
for (i=1;i<=n;i++)
{
if (data[i].ch[0]=='G' || data[i].ch[0]=='R')
{
for (j=data[i].x+1;j<=10;j++)
{
hash[j][data[i].y]=1;
if (map[j][data[i].y]==1) break;
}
for (j=data[i].x-1;j>=1;j--)
{
hash[j][data[i].y]=1;
if (map[j][data[i].y]==1) break;
}
for (j=data[i].y+1;j<=9;j++)
{
hash[data[i].x][j]=1;
if (map[data[i].x][j]==1) break;
}
for (j=data[i].y-1;j>=1;j--)
{
hash[data[i].x][j]=1;
if (map[data[i].x][j]==1) break;
}
}
if (data[i].ch[0]=='C')
{
mark=0;
for (j=data[i].x+1;j<=10;j++)
{
if (mark==1) hash[j][data[i].y]=1;
if (map[j][data[i].y]==1) mark++;
if (mark==2) break;
}
mark=0;
for (j=data[i].x-1;j>=1;j--)
{
if (mark==1) hash[j][data[i].y]=1;
if (map[j][data[i].y]==1) mark++;
if (mark==2) break;
}
mark=0;
for (j=data[i].y+1;j<=9;j++)
{
if (mark==1) hash[data[i].x][j]=1;
if (map[data[i].x][j]==1) mark++;
if (mark==2) break;
}
mark=0;
for (j=data[i].y-1;j>=1;j--)
{
if (mark==1) hash[data[i].x][j]=1;
if (map[data[i].x][j]==1) mark++;
if (mark==2) break;
}
}
if (data[i].ch[0]=='H')
{
x1=data[i].x+2; y1=data[i].y-1;
if (judge(x1,y1)==1 && map[data[i].x+1][data[i].y]==0) hash[x1][y1]=1;
x1=data[i].x+2; y1=data[i].y+1;
if (judge(x1,y1)==1 && map[data[i].x+1][data[i].y]==0) hash[x1][y1]=1;
x1=data[i].x+1; y1=data[i].y+2;
if (judge(x1,y1)==1 && map[data[i].x][data[i].y+1]==0) hash[x1][y1]=1;
x1=data[i].x-1; y1=data[i].y+2;
if (judge(x1,y1)==1 && map[data[i].x][data[i].y+1]==0) hash[x1][y1]=1;
x1=data[i].x-2; y1=data[i].y+1;
if (judge(x1,y1)==1 && map[data[i].x-1][data[i].y]==0) hash[x1][y1]=1;
x1=data[i].x-2; y1=data[i].y-1;
if (judge(x1,y1)==1 && map[data[i].x-1][data[i].y]==0) hash[x1][y1]=1;
x1=data[i].x+1; y1=data[i].y-2;
if (judge(x1,y1)==1 && map[data[i].x][data[i].y-1]==0) hash[x1][y1]=1;
x1=data[i].x-1; y1=data[i].y-2;
if (judge(x1,y1)==1 && map[data[i].x][data[i].y-1]==0) hash[x1][y1]=1;
}
}
ok=0;
if (judge1(x-1,y)==1 && hash[x-1][y]==0)
ok=1;
if (judge1(x+1,y)==1 && hash[x+1][y]==0)
ok=1;
if (judge1(x,y+1)==1 && hash[x][y+1]==0)
ok=1;
if (judge1(x,y-1)==1 && hash[x][y-1]==0)
ok=1;
if (ok==1) printf("NO\n");
else printf("YES\n");
}
return 0;
}