解题报告
模拟一题。。。
在每次向前走一步的时候判断是否有撞到其他机器人即可;还要注意的是break和continen的差别;
模拟题嘛,代码就是长,还好单步可以很清楚的调试。
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
struct node
{
int x,y;
char D[2];
} rob[200];
int mmap[200][200];
int main()
{
int n,m,a,b,i,j,t;
int R,T;
char A[2];
scanf("%d",&t);
while(t--)
{
int f=0;
memset(mmap,0,sizeof(mmap));
scanf("%d%d",&b,&a);
scanf("%d%d",&n,&m);
for(i=1; i<=n; i++)
{
scanf("%d%d%s",&rob[i].y,&rob[i].x,rob[i].D);
rob[i].x=a-rob[i].x+1;
mmap[rob[i].x][rob[i].y]=i;
}
while(m--)
{
scanf("%d%s%d",&R,A,&T);
if(f)continue;
mmap[rob[R].x][rob[R].y]=0;
if(rob[R].D[0]=='E')
{
if(A[0]=='F')
{
for(i=1; i<=T; i++)
{
if(rob[R].y+i<=b)
{
if(mmap[rob[R].x][rob[R].y+i]!=0)
{
f=1;
printf("Robot %d crashes into robot %d\n",R,mmap[rob[R].x][rob[R].y+i]);
break;
}
}
}
if(f==0)
{
rob[R].y+=T;
if(rob[R].y>b)
{
f=1;
printf("Robot %d crashes into the wall\n",R);
continue;
}
else mmap[rob[R].x][rob[R].y]=R;
}
}
else if(A[0]=='L')
{
int k=T%4;
switch(k)
{
case 0:
rob[R].D[0]='E';
break;
case 1:
rob[R].D[0]='N';
break;
case 2:
rob[R].D[0]='W';
break;
case 3:
rob[R].D[0]='S';
break;
}
}
else if(A[0]=='R')
{
int k=T%4;
switch(k)
{
case 0:
rob[R].D[0]='E';
break;
case 1:
rob[R].D[0]='S';
break;
case 2:
rob[R].D[0]='W';
break;
case 3:
rob[R].D[0]='N';
break;
}
}
}
else if(rob[R].D[0]=='W')
{
if(A[0]=='F')
{
for(i=1; i<=T; i++)
{
if(rob[R].y-i>=1)
{
if(mmap[rob[R].x][rob[R].y-i]!=0)
{
f=1;
printf("Robot %d crashes into robot %d\n",R,mmap[rob[R].x][rob[R].y-i]);
break;
}
}
}
if(f==0)
{
rob[R].y-=T;
if(rob[R].y<1)
{
f=1;
printf("Robot %d crashes into the wall\n",R);
continue;
}
else mmap[rob[R].x][rob[R].y]=R;
}
}
else if(A[0]=='R')
{
int k=T%4;
switch(k)
{
case 0:
rob[R].D[0]='W';
break;
case 1:
rob[R].D[0]='N';
break;
case 2:
rob[R].D[0]='E';
break;
case 3:
rob[R].D[0]='S';
break;
}
}
else if(A[0]=='L')
{
int k=T%4;
switch(k)
{
case 0:
rob[R].D[0]='W';
break;
case 1:
rob[R].D[0]='S';
break;
case 2:
rob[R].D[0]='E';
break;
case 3:
rob[R].D[0]='N';
break;
}
}
}
else if(rob[R].D[0]=='N')
{
if(A[0]=='R')
{
int k=T%4;
switch(k)
{
case 0:
rob[R].D[0]='N';
break;
case 1:
rob[R].D[0]='E';
break;
case 2:
rob[R].D[0]='S';
break;
case 3:
rob[R].D[0]='W';
break;
}
}
else if(A[0]=='F')
{
for(i=1; i<=T; i++)
{
if(rob[R].x-i>=1)
{
if(mmap[rob[R].x-i][rob[R].y]!=0)
{
f=1;
printf("Robot %d crashes into robot %d\n",R,mmap[rob[R].x-i][rob[R].y]);
break;
}
}
}
if(f==0)
{
rob[R].x-=T;
if(rob[R].x<1)
{
f=1;
printf("Robot %d crashes into the wall\n",R);
continue;
}
else mmap[rob[R].x][rob[R].y]=R;
}
}
else if(A[0]=='L')
{
int k=T%4;
switch(k)
{
case 0:
rob[R].D[0]='N';
break;
case 1:
rob[R].D[0]='W';
break;
case 2:
rob[R].D[0]='S';
break;
case 3:
rob[R].D[0]='E';
break;
}
}
}
else if(rob[R].D[0]=='S')
{
if(A[0]=='L')
{
int k=T%4;
switch(k)
{
case 0:
rob[R].D[0]='S';
break;
case 1:
rob[R].D[0]='E';
break;
case 2:
rob[R].D[0]='N';
break;
case 3:
rob[R].D[0]='W';
break;
}
}
else if(A[0]=='F')
{
for(i=1; i<=T; i++)
{
if(rob[R].x+i<=a)
{
if(mmap[rob[R].x+i][rob[R].y]!=0)
{
f=1;
printf("Robot %d crashes into robot %d\n",R,mmap[rob[R].x+i][rob[R].y]);
break;
}
}
}
if(f==0)
{
rob[R].x+=T;
if(rob[R].x>a)
{
f=1;
printf("Robot %d crashes into the wall\n",R);
continue;
}
else mmap[rob[R].x][rob[R].y]=R;
}
}
else if(A[0]=='R')
{
int k=T%4;
switch(k)
{
case 0:
rob[R].D[0]='S';
break;
case 1:
rob[R].D[0]='W';
break;
case 2:
rob[R].D[0]='N';
break;
case 3:
rob[R].D[0]='E';
break;
}
}
}
}
if(f==0)printf("OK\n");
}
return 0;
}