Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
终于AC了,没按它的图建坐标系的话方向都要反过来,即左转就右转,右转就左转#include <iostream> #include <cstring> #include<vector> #include<algorithm> #include<cmath> #include<cstdio> using namespace std; struct node{ int x,y; int dir; node(int x1,int y1,int d):x(x1),y(y1),dir(d){ } node(){ } }; struct onode{ int in,t; char ch; onode(int i,int ti,char c){ in=i; t=ti; ch=c; } onode(){ } }; int col,row,n,m; int map[105][105]; node robot[105]; onode order[105]; int dir_[4][2]={-1,0,0,1,1,0,0,-1}; void init(){ memset(map,0,sizeof(map)); scanf("%d%d",&col,&row); scanf("%d%d",&n,&m); int x,y; char dir; for(int i=0;i<n;i++){ scanf("%d %d %c",&y,&x,&dir); if(dir=='N') robot[i]=node(x-1,y-1,2); else if(dir=='E') robot[i]=node(x-1,y-1,1); else if(dir=='S') robot[i]=node(x-1,y-1,0); else robot[i]=node(x-1,y-1,3); map[x-1][y-1]=i+1; } for(int i=0;i<m;i++){ scanf("%d %c %d",&x,&dir,&y); order[i]=onode(x,y,dir); // cout<<order[i].in<<" "<<order[i].ch<<" "<<order[i].t<<endl; } } bool F(int i){ int x,y,dir,in,time; in=order[i].in-1; time=order[i].t; x=robot[in].x; y=robot[in].y; dir=robot[in].dir; map[x][y]=0; for(int j=0;j<time;j++){ x+=dir_[dir][0]; y+=dir_[dir][1]; // printf("%d %d\n",x,y); if(x<0 || x>row-1 || y<0 || y>col-1){ printf("Robot %d crashes into the wall\n",in+1);return false; } else if(map[x][y]){ printf("Robot %d crashes into robot %d\n",in+1,map[x][y]);return false; } } map[x][y]=in+1; robot[in]=node(x,y,dir); return true; } void L(int i){ int x,y,dir,in,time; in=order[i].in-1; time=order[i].t; x=robot[in].x; y=robot[in].y; dir=robot[in].dir; dir=(dir+time)%4; robot[in]=node(x,y,dir); } void R(int i){ int x,y,dir,in,time; in=order[i].in-1; time=order[i].t; x=robot[in].x; y=robot[in].y; dir=robot[in].dir; dir=((dir%4+4)-time%4)%4; robot[in]=node(x,y,dir); } void work(){ bool flag=true; for(int i=0;i<m && flag;i++){ switch(order[i].ch){ case 'F': if(!F(i)){ flag=false; }break; case 'L':L(i);break; case 'R':R(i);break; } } if(flag){ printf("OK\n"); } } int main() { // freopen("read.txt","r",stdin); // freopen("write.txt","w",stdout); int T; cin>>T; while(T--) { init(); work(); } // fclose(stdin); // fclose(stdout); return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator