5,530
社区成员
发帖
与我相关
我的任务
分享
#include<stdio.h>
#include<string.h>
int main()
{
int X[15][15],Q[15][15];
int N,x0,y0;
while(scanf("%d%d%d",&N,&x0,&y0)==3&&N&&x0&&y0)
{
memset(X,0,sizeof X);
memset(Q,0,sizeof Q);
X[x0][y0]=1;
while(N--)
{
while(getchar()!='\n');
char ch;
int x,y,x1,y1;
scanf("%c%d%d",&ch,&x,&y);
switch(ch)
{
case 'G':X[x][y]=1;
while(!X[--x][y]&&x)
Q[x][y]=1;
Q[x][y]=1;
break;
case 'R':X[x][y]=1;
x1=x;
y1=y;
while(!X[--x][y]&&x)
Q[x][y]=1;
Q[x][y]=1;
x=x1;
while(!X[++x][y]&&x<=10)
Q[x][y]=1;
Q[x][y]=1;
x=x1;
while(!X[x][--y]&&y)
Q[x][y]=1;
Q[x][y]=1;
y=y1;
while(!X[x][++y]&&y<=9)
Q[x][y]=1;
Q[x][y]=1;
break;
case 'H':X[x][y]=1;
if(x-1&&!X[x-1][y])
{
if(x-2&&y-1&&!X[x-2][y-1])
Q[x-2][y-1]=1;
if(x-2&&y+1<=9&&!X[x-2][y+1])
Q[x-2][y+1]=1;
}
if(x+1&&!X[x+1][y])
{
if(x+2<=10&&y-1&&!X[x+2][y-1])
Q[x+2][y-1]=1;
if(x+2&&y+1<=9&&!X[x+2][y+1])
Q[x+2][y+1]=1;
}
if(y-1&&!X[x][y-1])
{
if(y-2&&x-1&&!X[y-2][x-1])
Q[y-2][x-1]=1;
if(y-2&&x+1<=9&&!X[y-2][x+1])
Q[y-2][x+1]=1;
}
if(y+1&&!X[x][y+1])
{
if(y+2<=9&&x-1&&!X[y+2][x-1])
Q[y+2][x-1]=1;
if(y+2&&x+1<=9&&!X[y+2][x+1])
Q[y+2][x+1]=1;
}
break;
case 'C':X[x][y]=1;
for(int i=1;x-i;i++)
{
if(!X[x-i][y])
continue;
if(x-i-1&&!X[x-i][y])
{
Q[x-i][y]=1;
break;
}
}
for(int i=1;x+i<=10;i++)
{
if(!X[x+i][y])
continue;
if(x+i+1<=10&&!X[x+i][y])
Q[x+i+1][y]=1;
break;
}
for(int i=1;y-i;i++)
{
if(!X[x][y-i])
continue;
if(y-i-1&&!X[x][y-i-1])
Q[x][y-i-1]=1;
break;
}
for(int i=1;y+i<=9;i++)
{
if(!X[x][y+i])
continue;
if(y+i+1<=9&&!X[x][y+i])
Q[x][y+i+1]=1;
break;
}
break;
}
}
int sum=0;
if(x0-1&&x0-1<=3&&!Q[x0-1][y0])
sum++;
if(x0+1&&x0+1<=3&&!Q[x0+1][y0])
sum++;
if(y0-1>=4&&y0-1<=6&&!Q[x0][y0-1])
sum++;
if(y0+1>=4&&y0+1<=6&&!Q[x0][y0+1])
sum++;
if(!Q[x0][y0])
sum++;
if(!sum)
printf("YES\n");
else printf("NO\n");
}
return 0;
}
case 'G':X[x][y]=1;
x1=x;
while(!X[--x][y]&&x)//此处对红王这一列能到达的都设了标记,黑将一往右走就会被吃
Q[x][y]=1;
Q[x][y]=1;
if(y0==y)
{
int i;
for( i=x0+1;i<x1;i++)
if(X[i][y])
break;
if(i==x1)
sum++;
}
break;
[/quote]
不是说的红王,是说的红车 ,你试一下这个test
2 1 4
G 10 5
R 2 4case 'G':X[x][y]=1;
x1=x;
while(!X[--x][y]&&x)//此处对红王这一列能到达的都设了标记,黑将一往右走就会被吃
Q[x][y]=1;
Q[x][y]=1;
if(y0==y)
{
int i;
for( i=x0+1;i<x1;i++)
if(X[i][y])
break;
if(i==x1)
sum++;
}
break;
[/quote]
不是说的红王,是说的红车 ,你试一下这个test
2 1 4
G 10 5
R 2 4[/quote]
#include<stdio.h>
#include<string.h>
#include<math.h>
int main()
{
int X[15][15],Q[15][15];
int N,x0,y0;
while(scanf("%d%d%d",&N,&x0,&y0)==3&&N&&x0&&y0)
{
int w=0;
memset(X,0,sizeof X);
memset(Q,0,sizeof Q);
X[x0][y0]=1;
for(int i=1;i<=3;i++)
{
for(int j=4;j<=6;j++)
{
if(fabs(x0-i)<=1&&y0==j)
w++;
else if(x0==i&&fabs(y0-j)<=1)
w++;
}
}
while(N--)
{
while(getchar()!='\n');
char ch;
int x,y,x1,y1;
scanf("%c%d%d",&ch,&x,&y);
switch(ch)
{
case 'G':X[x][y]=1;
Q[x][y]=1;
x1=x;
while(!X[--x][y]&&x)
Q[x][y]=1;
Q[x][y]=1;
break;
case 'R':X[x][y]=1;
Q[x][y]=1;
x1=x;
y1=y;
while(!X[--x][y]&&x)
Q[x][y]=1;
Q[x][y]=1;
x=x1;
while(!X[++x][y]&&x<=10)
Q[x][y]=1;
Q[x][y]=1;
x=x1;
while(!X[x][--y]&&y)
Q[x][y]=1;
Q[x][y]=1;
y=y1;
while(!X[x][++y]&&y<=9)
Q[x][y]=1;
Q[x][y]=1;
break;
case 'H':X[x][y]=1;
Q[x][y]=1;
if(x-1&&!X[x-1][y])
{
if(x-2&&y-1&&!X[x-2][y-1])
Q[x-2][y-1]=1;
if(x-2&&y+1<=9&&!X[x-2][y+1])
Q[x-2][y+1]=1;
}
if(x+1&&!X[x+1][y])
{
if(x+2<=10&&y-1&&!X[x+2][y-1])
Q[x+2][y-1]=1;
if(x+2&&y+1<=9&&!X[x+2][y+1])
Q[x+2][y+1]=1;
}
if(y-1&&!X[x][y-1])
{
if(y-2&&x-1&&!X[y-2][x-1])
Q[y-2][x-1]=1;
if(y-2&&x+1<=9&&!X[y-2][x+1])
Q[y-2][x+1]=1;
}
if(y+1&&!X[x][y+1])
{
if(y+2<=9&&x-1&&!X[y+2][x-1])
Q[y+2][x-1]=1;
if(y+2&&x+1<=9&&!X[y+2][x+1])
Q[y+2][x+1]=1;
}
break;
case 'C':X[x][y]=1;
Q[x][y]=1;
for(int i=1;x-i;i++)
{
if(!X[x-i][y])
continue;
if(x-i-1&&!X[x-i][y])
{
Q[x-i][y]=1;
break;
}
}
for(int i=1;x+i<=10;i++)
{
if(!X[x+i][y])
continue;
if(x+i+1<=10&&!X[x+i][y])
Q[x+i+1][y]=1;
break;
}
for(int i=1;y-i;i++)
{
if(!X[x][y-i])
continue;
if(y-i-1&&!X[x][y-i-1])
Q[x][y-i-1]=1;
break;
}
for(int i=1;y+i<=9;i++)
{
if(!X[x][y+i])
continue;
if(y+i+1<=9&&!X[x][y+i])
Q[x][y+i+1]=1;
break;
}
break;
}
}
for(int i=1;i<=3;i++)
{
for(int j=4;j<=6;j++)
{
if(Q[i][j])
{
if(fabs(x0-i)<=1&&y0==j)
w--;
else if(x0==i&&fabs(y0-j)<=1)
w--;
}
}
}
if(!w)
printf("YES\n");
else printf("NO\n");
}
return 0;
}
修改后你给的那个测试是YES,但UVA上还是WA,找了别人的代码在UVA能过,但你给的那个测试是NO。。。case 'G':X[x][y]=1;
x1=x;
while(!X[--x][y]&&x)//此处对红王这一列能到达的都设了标记,黑将一往右走就会被吃
Q[x][y]=1;
Q[x][y]=1;
if(y0==y)
{
int i;
for( i=x0+1;i<x1;i++)
if(X[i][y])
break;
if(i==x1)
sum++;
}
break;
#include<stdio.h>
#include<string.h>
int main()
{
int X[15][15],Q[15][15];
int N,x0,y0;
while(scanf("%d%d%d",&N,&x0,&y0)==3&&N&&x0&&y0)
{
int sum=0;
memset(X,0,sizeof X);
memset(Q,0,sizeof Q);
X[x0][y0]=1;
while(N--)
{
while(getchar()!='\n');
char ch;
int x,y,x1,y1;
scanf("%c%d%d",&ch,&x,&y);
switch(ch)
{
case 'G':X[x][y]=1;
x1=x;
while(!X[--x][y]&&x)
Q[x][y]=1;
Q[x][y]=1;
if(y0==y)
{
int i;
for( i=x0+1;i<x1;i++)
if(X[i][y])
break;
if(i==x1)
sum++;
}
break;
case 'R':X[x][y]=1;
x1=x;
y1=y;
while(!X[--x][y]&&x)
Q[x][y]=1;
Q[x][y]=1;
x=x1;
while(!X[++x][y]&&x<=10)
Q[x][y]=1;
Q[x][y]=1;
x=x1;
while(!X[x][--y]&&y)
Q[x][y]=1;
Q[x][y]=1;
y=y1;
while(!X[x][++y]&&y<=9)
Q[x][y]=1;
Q[x][y]=1;
break;
case 'H':X[x][y]=1;
if(x-1&&!X[x-1][y])
{
if(x-2&&y-1&&!X[x-2][y-1])
Q[x-2][y-1]=1;
if(x-2&&y+1<=9&&!X[x-2][y+1])
Q[x-2][y+1]=1;
}
if(x+1&&!X[x+1][y])
{
if(x+2<=10&&y-1&&!X[x+2][y-1])
Q[x+2][y-1]=1;
if(x+2&&y+1<=9&&!X[x+2][y+1])
Q[x+2][y+1]=1;
}
if(y-1&&!X[x][y-1])
{
if(y-2&&x-1&&!X[y-2][x-1])
Q[y-2][x-1]=1;
if(y-2&&x+1<=9&&!X[y-2][x+1])
Q[y-2][x+1]=1;
}
if(y+1&&!X[x][y+1])
{
if(y+2<=9&&x-1&&!X[y+2][x-1])
Q[y+2][x-1]=1;
if(y+2&&x+1<=9&&!X[y+2][x+1])
Q[y+2][x+1]=1;
}
break;
case 'C':X[x][y]=1;
for(int i=1;x-i;i++)
{
if(!X[x-i][y])
continue;
if(x-i-1&&!X[x-i][y])
{
Q[x-i][y]=1;
break;
}
}
for(int i=1;x+i<=10;i++)
{
if(!X[x+i][y])
continue;
if(x+i+1<=10&&!X[x+i][y])
Q[x+i+1][y]=1;
break;
}
for(int i=1;y-i;i++)
{
if(!X[x][y-i])
continue;
if(y-i-1&&!X[x][y-i-1])
Q[x][y-i-1]=1;
break;
}
for(int i=1;y+i<=9;i++)
{
if(!X[x][y+i])
continue;
if(y+i+1<=9&&!X[x][y+i])
Q[x][y+i+1]=1;
break;
}
break;
}
}
if(x0-1&&x0-1<=3&&!Q[x0-1][y0])
sum++;
if(x0+1&&x0+1<=3&&!Q[x0+1][y0])
sum++;
if(y0-1>=4&&y0-1<=6&&!Q[x0][y0-1])
sum++;
if(y0+1>=4&&y0+1<=6&&!Q[x0][y0+1])
sum++;
if(!Q[x0][y0])
sum++;
if(!sum)
printf("YES\n");
else printf("NO\n");
}
return 0;
}
修改后还是WA啊