poj 2632 模拟
2012-04-06 15:18
281 查看
模拟题,注意两点
1.坐标
2.L,R后边的数字是向左或向右转几次
1.坐标
2.L,R后边的数字是向左或向右转几次
#include <iostream> #include <stdio.h> #include <string.h> using namespace std; const int maxx=102; int loc[maxx][maxx],a,b; //loc 地图第ij个位置是第几个机器人 char dir[maxx][maxx]; struct OPE //操作 { int ind; char op; int step; }; OPE ope[maxx]; struct ROBOT //机器人 { int x,y; char di; }; ROBOT ro[maxx]; void updateloc(int x,int y,int nx,int ny)//更新地图位置 { loc[nx][ny]=loc[x][y]; loc[x][y]=0; } void updatero(int index,int x,int y,char dir)//更新机器人位置、方向 { ro[index].x=x; ro[index].y=y; ro[index].di=dir; } bool crashwall(int x,int y) //是否撞墙 { if((x>=1 && x<=b)&&(y>=1 && y<=a))return 0; else return 1; } int crash(int x,int y,int step,char dir) //撞到第几个机器人 { int i,j; switch(dir) { case 'W': { for(i=x-1;i>=x-step;i--) { if(crashwall(i,y)) return -1; else if(loc[i][y]) return loc[i][y]; } updatero(loc[x][y],x-step,y,'W'); updateloc(x,y,x-step,y); break; } case 'E': { for(i=x+1;i<=x+step;i++) { if(crashwall(i,y)) return -1; else if(loc[i][y]) return loc[i][y]; } updatero(loc[x][y],x+step,y,'E'); updateloc(x,y,x+step,y); break; } case 'N': { for(i=y+1;i<=y+step;i++) { if(crashwall(x,i)) return -1; else if(loc[x][i]) return loc[x][i]; } updatero(loc[x][y],x,y+step,'N'); updateloc(x,y,x,y+step); break; } default: { for(i=y-1;i>=y-step;i--) { if(crashwall(x,i)) return -1; else if(loc[x][i]) return loc[x][i]; } updatero(loc[x][y],x,y-step,'S'); updateloc(x,y,x,y-step); } } return 0; } int opero(int index,char op,int step)//操作机器人 { switch(op) { case 'F':return crash(ro[index].x,ro[index].y,step,ro[index].di); case 'L': switch(ro[index].di) { case 'W': if(step%4==1) ro[index].di='S'; else if(step%4==2) ro[index].di='E'; else if(step%4==3) ro[index].di='N'; else ro[index].di='W'; break; case 'E': if(step%4==1) ro[index].di='N'; else if(step%4==2) ro[index].di='W'; else if(step%4==3) ro[index].di='S'; else ro[index].di='E'; break; case 'N': if(step%4==1) ro[index].di='W'; else if(step%4==2) ro[index].di='S'; else if(step%4==3) ro[index].di='E'; else ro[index].di='N'; break; default: if(step%4==1) ro[index].di='E'; else if(step%4==2) ro[index].di='N'; else if(step%4==3) ro[index].di='W'; else ro[index].di='S'; break; } break; default : switch(ro[index].di) { case 'W': if(step%4==1) ro[index].di='N'; else if(step%4==2) ro[index].di='E'; else if(step%4==3) ro[index].di='S'; else ro[index].di='W'; break; case 'E': if(step%4==1) ro[index].di='S'; else if(step%4==2) ro[index].di='W'; else if(step%4==3) ro[index].di='N'; else ro[index].di='E'; break; case 'N': if(step%4==1) ro[index].di='E'; else if(step%4==2) ro[index].di='S'; else if(step%4==3) ro[index].di='W'; else ro[index].di='N'; break; default: if(step%4==1) ro[index].di='W'; else if(step%4==2) ro[index].di='N'; else if(step%4==3) ro[index].di='E'; else ro[index].di='S'; break; } } return 0; } int main() { int n,m,x,y,op,ans,flag,t,tt,i,ans2; char d; //freopen("in.txt","r",stdin); scanf("%d",&t); for(tt=1;tt<=t;tt++) { scanf("%d%d",&b,&a); flag=0; memset(dir,0,sizeof(dir)); memset(loc,0,sizeof(loc)); scanf("%d%d",&n,&m); for(i=1;i<=n;i++) { scanf("%d %d %c",&x,&y,&d); ro[i].x=x; ro[i].y=y; ro[i].di=d; loc[x][y]=i; dir[x][y]=d; } for(i=1;i<=m;i++) scanf("%d %c %d",&ope[i].ind,&ope[i].op,&ope[i].step); for(i=1;i<=m;i++) { ans=opero(ope[i].ind,ope[i].op,ope[i].step); if(ans){flag=1;ans2=ope[i].ind;break;} } if(flag) { if(ans==-1) printf("Robot %d crashes into the wall\n",ans2); else printf("Robot %d crashes into robot %d\n",ans2,ans); } else printf("OK\n"); } return 0; }
相关文章推荐
- poj2632--模拟
- poj 2632 模拟
- poj 2632 (模拟)
- POJ 2632 Crashing Robots 水模拟
- POJ-2632 Crashing Robots 模拟水题
- POJ2632《Crashing Robots》方法:模拟
- Crashing Robots POJ 2632 简单模拟
- 初级->基本算法->模拟 poj 2632 Crashing Robots
- poj 2632 Crashing Robots(模拟)
- poj 2632 模拟
- POJ2632——模拟——Crashing Robots
- poj 2632 Crashing Robots(模拟)
- poj 2632 Crashing Robots 模拟
- POJ 2632 Crashing Robots(简单模拟)
- POJ 2632-Crashing Robots(模拟-robot移动)
- poj 2632 Crashing Robots【模拟】【略坑~】【刷题计划】
- poj-2632-- Crashing Robots -- 模拟法
- poj_2632_Crashing Robots(模拟)
- poj 2632 Crashing Robots——模拟
- poj2632 Crashing Robots 模拟水题