#include<iostream>
#include<stdio.h>
#include<stack>
#include<string.h>
using namespace std;
#define MAXN 110
int A,B;
int m,n;
struct point{
int x;
int y;
int dir;
};
struct order{
int robot;
char action;
int repeat;
};
int board[MAXN][MAXN];
int dx[]={0,1,0,-1};
int dy[]={1,0,-1,0};
point robots[MAXN];
order commands[MAXN];
int main(){
int t;
cin>>t;
int i,j;
char ch;
while(t--){
memset(board,0,sizeof(board));
cin>>A>>B;
cin>>n>>m;
for(i=1;i<=n;i++){
cin>>robots[i].x>>robots[i].y>>ch;
board[robots[i].x][robots[i].y]=i; //记录在第几个位置
switch(ch){
case 'N':robots[i].dir=0;break;
case 'E':robots[i].dir=1;break;
case 'S':robots[i].dir=2;break;
case 'W':robots[i].dir=3;break;
}
}
for(i=0;i<m;i++){
cin>>commands[i].robot>>commands[i].action>>commands[i].repeat;
}
int cur,rp;
bool state;
state=false;
for(i=0;i<m;i++){
cur=commands[i].robot;
rp=commands[i].repeat;
switch(commands[i].action){
case 'L':{
robots[cur].dir=(robots[cur].dir+3*rp)%4;
break;
}
case 'R':{
robots[cur].dir=(robots[cur].dir+rp)%4;
break;
}
case 'F':{
for(j=0;j<rp;j++){
int d=robots[cur].dir;
int oldX,oldY,newX,newY;
oldX=robots[cur].x;
oldY=robots[cur].y;
newX=oldX+dx[d];
newY=oldY+dy[d];
robots[cur].x=newX;
robots[cur].y=newY;
if(robots[cur].x==0||robots[cur].x==(A+1)||robots[cur].y==0||robots[cur].y==(B+1)){
cout<<"Robot "<<cur<<" crashes into the wall"<<endl;
state=true;
break;
}
if(board[newX][newY]){ //Robot 1 crashes into robot 2
cout<<"Robot "<<cur<<" crashes into robot "<<board[newX][newY]<<endl;
state=true;
break;
}else{ //no robot
board[newX][newY]=cur;
board[oldX][oldY]=0;
}
}
break;
}
}
if(state) break;
}
if(!state) cout<<"OK"<<endl;
}
return 0;
}
Crashing Robots POJ 2632
最新推荐文章于 2020-05-13 10:19:26 发布