int ans;switch(ins){case'L':
ans =(rob[t].dir + n%4)%4;
rob[t].dir = ans ? ans :4;break;case'R':
ans =(rob[t].dir +4- n%4)%4;
rob[t].dir = ans ? ans :4;break;case'F':MoveForward(t,n);break;}
完整代码:
664K 0MS
//664K 0MS#include<iostream>#include<cstring>
using namespace std;constint maxn =105;
bool mp[maxn][maxn];
bool ok;int l,r;int M,N;int numr,numi;struct ROBOT{int x;int y;int dir;}rob[maxn];voidinit(){
l = r =0;
ok = true;memset(mp,0,sizeof(mp));return;}
bool check(int i){int x = rob[i].x;int y = rob[i].y;if(x<1|| y<1|| x>M || y>N){
l = i;//crash into wallreturn ok = false;}return true;}voidMoveForward(int i,int n){
mp[rob[i].x][rob[i].y]= false;while(n--){switch(rob[i].dir){case1: rob[i].x++;break;case2: rob[i].y++;break;case3: rob[i].x--;break;case4: rob[i].y--;break;}//如果没有 check,一旦越出 maxn 使用 mp 很容易 RE if(check(i))if(mp[rob[i].x][rob[i].y]){
l = i;for(int t=1;t<=numr;t++){if(t == i)continue;if(rob[t].x == rob[i].x && rob[t].y == rob[i].y){
r = t;break;}}
ok = false;break;}else;elsebreak;}if(ok)
mp[rob[i].x][rob[i].y]= true;return;}intmain(){
ios::sync_with_stdio(false);
cin.tie(0);int T;cin>>T;while(T--){init();
cin>>M>>N;
cin>>numr>>numi;for(int i=1;i<=numr;i++){char dir;
cin>>rob[i].x>>rob[i].y>>dir ;
mp[rob[i].x][rob[i].y]= true;switch(dir){case'E': rob[i].dir =1;break;case'N': rob[i].dir =2;break;case'W': rob[i].dir =3;break;case'S': rob[i].dir =4;break;}}for(int i=1;i<=numi;i++){int t;//serial numberchar ins;//instructionint n;//repeat
cin>>t>>ins>>n;int ans;if(ok)switch(ins){case'L':
ans =(rob[t].dir + n%4)%4;
rob[t].dir = ans ? ans :4;break;//case'R':
ans =(rob[t].dir +4- n%4)%4;
rob[t].dir = ans ? ans :4;break;case'F':MoveForward(t,n);break;}else;}if(ok)
cout<<"OK"<<endl;elseif(r)
cout<<"Robot "<<l<<" crashes into robot "<<r<<endl;else
cout<<"Robot "<<l<<" crashes into the wall"<<endl ;}return0;}