1a,开心
模拟题,恶心的很。。。。
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<algorithm>
#include<stack>
#include<queue>
using namespace std;
int T,A,B,N,M;
bool flag;
struct Map
{
int id,dir;
}a[120][120],t;
int swhdir[4][2]={-1,0,0,1,1,0,0,-1};
void Mapint(int A,int B)
{
for(int i=0;i<B+5;i++)
for(int j=0;j<A+5;j++)
a[i][j].id=a[i][j].dir=0;
}
void loca(int robotid,int x,int y,int direction)
{
a[x][y].id=robotid;
a[x][y].dir=direction;
}
void printmap()
{
for(int i=0;i<B;i++)
{
for(int j=0;j<A;j++)
printf("%d %d** ",a[i][j].id,a[i][j].dir);
printf("\n");
}
}
void move(int robotid,char op,int step)
{
int i,j;
for(i=0;i<B;i++)
{
for(j=0;j<A;j++)
if(a[i][j].id==robotid)
break;
if(j<A)
break;
}
//printf("%d %d\n",i,j);
if(op=='L')
a[i][j].dir=((a[i][j].dir-step)%4+4)%4;
else if(op=='R')
a[i][j].dir=(a[i][j].dir+step)%4;
else if(op=='F')
{
while(step--)
{
int nx_i=i+swhdir[a[i][j].dir][0];
int nx_j=j+swhdir[a[i][j].dir][1];
//printf("%d %d\n",nx_i,nx_j);
if(nx_i<0||nx_i>B-1||nx_j<0||nx_j>A-1)
{
printf("Robot %d crashes into the wall\n",a[i][j].id);
flag=false;
return;
}
else if(a[nx_i][nx_j].id!=0)
{
printf("Robot %d crashes into robot %d\n",a[i][j].id,a[nx_i][nx_j].id);
flag=false;
return;
}
else
{
a[nx_i][nx_j]=a[i][j];
a[i][j].id=a[i][j].dir=0;
i=nx_i;
j=nx_j;
// printf("\n");
// printmap();
}
}
}
}
int main()
{
scanf("%d",&T);
while(T--)
{
flag=true;
scanf("%d%d",&A,&B);
Mapint(A,B);
//printmap();
scanf("%d%d",&N,&M);
for(int i=0;i<N;i++)
{
int x,y,direction;
char tempdir[5];
scanf("%d%d%s",&x,&y,tempdir);
switch(tempdir[0])
{
case 'N':direction=0;break;
case 'E':direction=1;break;
case 'S':direction=2;break;
case 'W':direction=3;break;
default :direction=-1;
}
loca(i+1,B-y,x-1,direction);
}
//printmap();
for(int i=0;i<M;i++)
{
int robot,steps;
char tempmove[5];
scanf("%d%s%d",&robot,tempmove,&steps);
if(flag)move(robot,tempmove[0],steps);
}
if(flag)printf("OK\n");
}
//printmap();
return 0;
}