ニース、誤ってそれを上に変更し、裁判官カーマ足を忘れてしまいました!
アイデアは:封鎖位置を探す(であること、食べることになることに来て、そしてオリジナルのチェッカーボードが別々のように干渉がないように保持)
その後、シミュレート聖歌
へ:キル、当面の懸念誰かが、その人は殺され、その後、停止した
車を:と髪は、しかし、以上の3方向...うとして
大砲:最初に彼らの残りの半分を見つけ、後者は殺すために始めることができ、即時の懸念小さな2(第2出会いポイント)が小さいため2自身emmmの来ました2が殺され、その後、影(4ウェイ)に後退したので、小さな
特別は離れて自分自身を宣告ので、私は特に文の中で、少し奇妙歩く道ので...それから4まあ、良い十分ではありません、離れて私は自分自身のユニークな:馬さてあなたは、誤って外出しないだろう
コードに、遊びの全体の終わりを:
#include <bits/stdc++.h>
using namespace std;
int qi[25][25],sha[25][24];
int jia[4]={-1,1,0,0};
void jian(int x,int y);
void che(int x,int y);
void ma(int x,int y);
void pao(int x, int y);
int ke(int x,int y);
//sha标记所有对方将不可走的路
int main()
{
int n,x,y,x0[35],y0[35];
char c[35];
while(scanf("%d%d%d",&n,&x,&y)==3 &&n)
{
memset(qi,0,sizeof(qi));
memset(sha,0,sizeof(sha));
memset(x0,0,sizeof(x0));
memset(y0,0,sizeof(y0));
memset(c,'\0',sizeof(c));
for (int i = 0; i < n ; i++)
{
scanf(" %c%d%d",&c[i],&x0[i],&y0[i]);
qi[x0[i]][y0[i]] = 1;//本来棋的摆法
}//initialize
for (int i = 0; i < n; i++)
{
if(c[i]=='G') jian(x0[i],y0[i]); //将
else if(c[i]=='R') che(x0[i],y0[i]);//车
else if(c[i]=='H') ma(x0[i],y0[i]);//马
else pao(x0[i],y0[i]);//炮
}//operate
int ok = 0;
for (int i = 0; i < 4;i++)
{
int dx =jia[i],dy = jia[3-i];
if(x+dx >=1 && x+dx <= 3 && y+dy <=6 && y+dy >= 4)
{
if(!sha[x+dx][y+dy]) {
ok = 1; break;//no killed
}
}
}
if(ok) printf("NO\n");
else printf("YES\n");
}
return 0;
}
void jian(int x,int y)
{
for (int j = x-1; j>=1; j--)
{
sha[j][y] = 1;
if(qi[j][y]) break;
}
}//先走遇子就不干
void che(int x,int y)
{
for (int i = x+1;i <= 10; i++)
{
sha[i][y] = 1;
if(qi[i][y]) break;
}
for (int i = x-1;i>=1;i--)
{
sha[i][y] = 1;
if(qi[i][y]) break;
}
for (int j = y+1; j <= 9;j++)
{
sha[x][j] = 1;
if(qi[x][j]) break;
}
for (int j = y-1; j>=1;j--)
{
sha[x][j] = 1;
if(qi[x][j]) break;
}
}//和将同理就是多了三个方向
void ma(int x,int y)//就是4个马脚呗莫得马脚则莫得问题
{
for (int i = 0; i < 4;i++)
{
int dx =jia[i],dy = jia[3-i];
if(ke(x+dx,y+dy) && !qi[x+dx][y+dy])
{
if(i == 0)
{
if(ke(x-2,y-1)) sha[x-2][y-1] = 1;
if(ke(x-2,y+1)) sha[x-2][y+1] = 1;
}
else if(i==1)
{
if(ke(x+2,y-1)) sha[x+2][y-1] = 1;
if(ke(x+2,y+1)) sha[x+2][y+1] = 1;
}
else if(i==2)
{
if(ke(x-1,y+2)) sha[x-1][y+2] = 1;
if(ke(x+1,y+2)) sha[x+1][y+2] = 1;
}
else{
if(ke(x-1,y-2)) sha[x-1][y-2] = 1;
if(ke(x+1,y-2)) sha[x+1][y-2] = 1;
}
}
}
}
void pao(int x, int y)//遇第一个子后面就可以标记遇第二子就不干
{
int ok = 0;
for (int i = x+1;i <= 10; i++)
{
if(ok == 1) sha[i][y] = 1;
if(qi[i][y]) ok++;
}
ok = 0;
for (int i = x-1;i>=1;i--)
{
if(ok == 1) sha[i][y] = 1;
if(qi[i][y]) ok++;
}
ok = 0;
for (int j = y+1; j <= 9;j++)
{
if(ok == 1) sha[x][j] = 1;
if(qi[x][j]) ok++;
}
ok = 0;
for (int j = y-1; j>=1;j--)
{
if(ok == 1) sha[x][j] = 1;
if(qi[x][j]) ok++;
}
}
int ke(int x,int y)//判断子是否在棋盘内
{
if(x >= 1 && x <=10 && y >= 1 && y <= 9)
return 1;
return 0;
}