POJ2632Crashing Robots

来源:互联网 发布:12306网络订餐配送工 编辑:程序博客网 时间:2024/05/01 17:20

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;}


0 0
原创粉丝点击