POJ 2632--Crashing Robots
2017-10-07 14:34
351 查看
2017-10-07
原题链接
题目大意:
有一个东-西方向长A米,南-北方向长B米的仓库(0<=A,b<=100),仓库里有N个机器人,给出M条指令操纵它们(0<=N,M<=100)。输入数据第一行是一个整数K,给出测试数据的组数。接下来每组数据第一行给出A,B;第二行给出N,M;接下来N行每行两个整数表明一个机器人(编号1~N)的位置,还有一个字符表明机器人初始的朝向(W,N,E或S);再接着的M行每行第一个整数指出机器人编号,第二个字符给出指令类型(R:向当前方向右侧转90度;L:向当前方向左侧转90度;F:向当前方向前进1米),第三个整数指示这条指令的执行次数。只有一整行指令执行完才会执行下一行指令。对每一组测试数据,输出一行,如果没有机器人撞墙(试图移动到超出仓库范围的区域,输出“Robot x crashes into the wall”),或者撞到另一个机器人(总是记为正在移动的机器人撞上一个静止的机器人,输出“Robot x crashes into robot y”),输出为“OK”。
样例输入:
样例输出:
这题的思路没什么特别的,就是按照题意读取输入,初始化一个“仓库”,逐条模拟指令并判断机器人的状态。个人觉得有几点要注意:
1.一定要理清题目的“东西南北”与自己模拟仓库的二维数组维度之间的对应关系;
2.指令‘R’和‘L’不改变机器人位置,仅改变其朝向,‘F’会改变机器人位置。
概括起来,,就是:
读题一定要认真!!读题千万要认真!!读题绝对要认真!!
代码:
原题链接
题目大意:
有一个东-西方向长A米,南-北方向长B米的仓库(0<=A,b<=100),仓库里有N个机器人,给出M条指令操纵它们(0<=N,M<=100)。输入数据第一行是一个整数K,给出测试数据的组数。接下来每组数据第一行给出A,B;第二行给出N,M;接下来N行每行两个整数表明一个机器人(编号1~N)的位置,还有一个字符表明机器人初始的朝向(W,N,E或S);再接着的M行每行第一个整数指出机器人编号,第二个字符给出指令类型(R:向当前方向右侧转90度;L:向当前方向左侧转90度;F:向当前方向前进1米),第三个整数指示这条指令的执行次数。只有一整行指令执行完才会执行下一行指令。对每一组测试数据,输出一行,如果没有机器人撞墙(试图移动到超出仓库范围的区域,输出“Robot x crashes into the wall”),或者撞到另一个机器人(总是记为正在移动的机器人撞上一个静止的机器人,输出“Robot x crashes into robot y”),输出为“OK”。
样例输入:
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
样例输出:
Robot 1 crashes into the wall Robot 1 crashes into robot 2 OK Robot 1 crashes into robot 2
这题的思路没什么特别的,就是按照题意读取输入,初始化一个“仓库”,逐条模拟指令并判断机器人的状态。个人觉得有几点要注意:
1.一定要理清题目的“东西南北”与自己模拟仓库的二维数组维度之间的对应关系;
2.指令‘R’和‘L’不改变机器人位置,仅改变其朝向,‘F’会改变机器人位置。
概括起来,,就是:
读题一定要认真!!读题千万要认真!!读题绝对要认真!!
代码:
#include <iostream> #include <cstring> #include <cstdio> #define MAX 110 using namespace std; //记录机器人初始朝向: W-0,N-1,E-2,S-3 int warehouse[MAX][MAX]; int robotNum[MAX][2]; //四个方向对应的坐标变化(W,N,E,S),注意对应关系 int dirNS[4] = { 0, 1, 0,-1}; int dirWE[4] = {-1, 0, 1, 0}; //判断执行一次'F'指令后机器人的状态: 0-正常, 1-撞墙, 2-撞上其他机器人 int judState(int A, int B, int Xi, int& crash, int N) { int xx = robotNum[Xi][0]; int yy = robotNum[Xi][1]; int move = warehouse[xx][yy]; int Xmove = dirWE[move] + xx; int Ymove = dirNS[move] + yy; if(warehouse[Xmove][Ymove] == -1) { if(Xmove == 0 || Xmove == (A+1) || Ymove == 0 || Ymove == (B+1)) return 1; else { warehouse[Xmove][Ymove] = warehouse[xx][yy]; warehouse[xx][yy] = -1; robotNum[Xi][0] = Xmove; robotNum[Xi][1] = Ymove; } } else //撞上其他机器人 { for(int j = 1; j <= N; j++) { if(robotNum[j][0] == Xmove && robotNum[j][1] == Ymove) { crash = j; break; } } return 2; } return 0; } int main() { int K,A,B,N,M,Xi,Yi; char Dir; //K:输入样例组数 cin >> K; while(K > 0) { memset(warehouse, -1 ,sizeof(warehouse)); memset(robotNum, 0, sizeof(robotNum)); //A:每组中仓库的长(数组第1维); B:每组中仓库的宽(数组第2维) cin >> A >> B; //N:机器人数目; M:指令数目 cin >> N >> M; for(int i = 1; i <= N; i++) { //Xi,Yi:每个机器人的初始位置; Dir:每个机器人的初始朝向 cin >> Xi >> Yi >> Dir; switch(Dir) { case 'W' : warehouse[Xi][Yi] = 0; break; case 'N' : warehouse[Xi][Yi] = 1; break; case 'E' : warehouse[Xi][Yi] = 2; break; case 'S' : warehouse[Xi][Yi] = 3; break; } //robotNum:记录每个机器人的编号(按出现顺序) robotNum[i][0] = Xi; robotNum[i][1] = Yi; } //记录指令执行后机器人的状态: 0-正常, 1-撞墙, 2-撞上其他机器人 int state = 0; int tp1,tp3,crash; char tp2; for(int i = 0; i < M; i++) { cin >> tp1 >> tp2 >> tp3; if(state != 0) continue; //要完整地接收输入 Xi = tp1; Dir = tp2; Yi = tp3; for(; Yi > 0; Yi--) { if(state != 0) break; int xx = robotNum[Xi][0]; int yy = robotNum[Xi][1]; switch(Dir) { //* 注意:‘L’和‘R’,每步都需要转换90度 * //** 注意:只有‘F’操作才会改变机器人的位置,‘L’和‘R’只改变其方向 ** //********** 读题 千万/一定/必须 要 认真 ************* -_-|| case 'L': warehouse[xx][yy] = (warehouse[xx][yy] + 3) % 4; break; case 'R': warehouse[xx][yy] = (warehouse[xx][yy] + 1) % 4; break; case 'F': state = judState(A,B,Xi,crash,N); break; } } } if(state == 0) cout << "OK" << endl; else if(state == 1) cout << "Robot " << Xi << " crashes into the wall" << endl; else cout << "Robot " << Xi << " crashes into robot " << crash << endl; --K; } return 0; }
相关文章推荐
- POJ:2632-Crashing Robots
- POJ 2632 Crashing Robots
- Poj OpenJudge 百练 2632 Crashing Robots
- poj 2632 Crashing Robots
- poj 2632 Crashing Robots
- (模拟)poj2632 Crashing Robots
- POJ2632——Crashing Robots
- POJ 2632 Crashing Robots
- poj 2632 Crashing Robots
- POJ 2632 Crashing Robots
- POJ2632——Crashing Robots
- POJ2632 Crashing Robots
- poj-2632 Crashing Robots
- Crashing Robots(POJ_2632)
- POJ2632《Crashing Robots》方法:模拟
- POJ 2632 Crashing Robots
- POJ 2632:Crashing Robots
- poj-2632-Crashing Robots
- POJ 2632:Crashing Robots
- POJ2632——模拟——Crashing Robots