Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 8340 | Accepted: 3607 |
Description
Input
Output
Sample Input
4 5 4 2 2 1 1 E 5 4 W 1 F 7 2 F 7 5 4 2 4 1 1 E 5 4 W 1 F 3 2 F 1 1 L 1 1 F 3 5 4 2 2 1 1 E 5 4 W 1 L 96 1 F 2 5 4 2 3 1 1 E 5 4 W 1 F 4 1 L 1 1 F 20
Sample Output
Robot 1 crashes into the wall Robot 1 crashes into robot 2 OK Robot 1 crashes into robot 2 模拟题#include <iostream> #include <cstring> #include <cstdio> #include <cmath> #include <string> #include <stack> #include <queue> #include <vector> #include <algorithm> using namespace std; const int Max=1100000; struct node { int dir; int x; int y; } Robot[110]; struct INS { int num; int action; int repeat; } Order[110]; bool Map[110][110]; int Dir[4][2]= {{1,0},{0,-1},{-1,0},{0,1}}; int A,B; int n,m; int Handle(int s) { if(s=='S'||s=='R') { return 1; } if(s=='N') { return 3; } if(s=='E'||s=='F') { return 0; } if(s=='W') { return 2; } if(s=='L') return -1; return 0; } bool Mon() { for(int i=0; i<m; i++) { if(Order[i].action==1) { while(Order[i].repeat--) { Robot[Order[i].num].dir++; if(Robot[Order[i].num].dir==4) { Robot[Order[i].num].dir=0; } } } else if(Order[i].action==-1) { while(Order[i].repeat--) { Robot[Order[i].num].dir--; if(Robot[Order[i].num].dir==-1) { Robot[Order[i].num].dir=3; } } } else if(Order[i].action==0) { while(Order[i].repeat--) { Map[Robot[Order[i].num].x][Robot[Order[i].num].y]=false; Robot[Order[i].num].x+=Dir[Robot[Order[i].num].dir][0]; Robot[Order[i].num].y+=Dir[Robot[Order[i].num].dir][1]; if(Robot[Order[i].num].x==0||Robot[Order[i].num].x==A+1||Robot[Order[i].num].y==0||Robot[Order[i].num].y==B+1) { printf("Robot %d crashes into the wall\n",Order[i].num); return false; } else if(Map[Robot[Order[i].num].x][Robot[Order[i].num].y]) { for(int j=1; j<=n; j++) { if(j!=Order[i].num&&Robot[j].x==Robot[Order[i].num].x&&Robot[j].y==Robot[Order[i].num].y) { printf("Robot %d crashes into robot %d\n",Order[i].num,j); return false; } } } else { Map[Robot[Order[i].num].x][Robot[Order[i].num].y]=true; } } } } return true; } int main() { int T; char s; scanf("%d",&T); while(T--) { scanf("%d %d",&A,&B); scanf("%d %d",&n,&m); memset(Map,false,sizeof(Map)); for(int i=1; i<=n; i++) { scanf("%d %d %c",&Robot[i].x,&Robot[i].y,&s); Map[Robot[i].x][Robot[i].y]=true; Robot[i].dir=Handle(s); } for(int i=0; i<m; i++) { scanf("%d %c %d",&Order[i].num,&s,&Order[i].repeat); Order[i].action=Handle(s); } if(Mon()) { printf("OK\n"); } } return 0; }