poj2632 Crashing Robots
| Time Limit: 1000MS | Memory Limit: 65536K | |
| Total Submissions: 9859 | Accepted: 4209 |
Description
A robot crashes with a wall if it attempts to move outside the area of the warehouse, and two robots crash with each other if they ever try to occupy the same spot.
Input
The second line contains two integers, 1 <= N, M <= 100, denoting the numbers of robots and instructions respectively.
Then follow N lines with two integers, 1 <= Xi <= A, 1 <= Yi <= B and one letter (N, S, E or W), giving the starting position and direction of each robot, in order from 1 through N. No two robots start at the same position.
Figure 1: The starting positions of the robots in the sample warehouse
Finally there are M lines, giving the instructions in sequential order.
An instruction has the following format:
< robot #> < action> < repeat>
Where is one of
- L: turn left 90 degrees,
- R: turn right 90 degrees, or
- F: move forward one meter,
and 1 <= < repeat> <= 100 is the number of times the robot should perform this single move.
Output
- Robot i crashes into the wall, if robot i crashes into a wall. (A robot crashes into a wall if Xi = 0, Xi = A + 1, Yi = 0 or Yi = B + 1.)
- Robot i crashes into robot j, if robots i and j crash, and i is the moving robot.
- OK, if no crashing occurs.
Only the first crash is to be reported.
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
Source
题目大意如下:给定几个机器人在一个房间里的坐标和面对的方向(东南西北),再给定几个移动(转几次方向或沿原方向前进其次),判断这些机器人是否会撞到房间墙壁或撞到互相或平安无事。
题解:模拟即可。把方向数组设成按顺时针或逆时针的顺序可缩减代码量。转方向时,注意mod4来减少要转圈数。
| 15775948 | ksq2013 | 2632 | Accepted | 732K | 0MS | G++ | 1985B | 2016-07-21 18:05:33 |
代码稍长:
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;//横坐标x代表WE方向,纵坐标y代表NS方向;
//const int mx[]={0,+1,-1,0,0};mov[1]->E,沿x轴向东/右移动+1;mov[2]->W,向西/左移动-1;mov[3]->N,沿x轴不移动;mov[4]->S,沿x轴不移动.
//const int my[]={0,0,0,+1,-1};mov[1]->E,沿y轴不移动;mov[2]->W,沿y轴不移动;mov[3]->N,沿y轴向北/上移动+1;mov[4]->S,沿y轴向南/下移动-1.
//顺序:东南西北;从0开始;
const int mx[]={+1,0,-1,0};
const int my[]={0,-1,0,+1};
int n,m,p,q,mp[101][101];
struct robot{
int x,y,z;
}rt[101];
struct req{
int k,rep;
char pos;
}rq[101];
void Init()
{
scanf("%d%d%d%d",&n,&m,&p,&q);
for(int i=1;i<=p;i++){
char z;
scanf("%d%d",&rt[i].x,&rt[i].y);
getchar();
z=getchar();
mp[rt[i].x][rt[i].y]=i;
switch(z){
case 'E':rt[i].z=0;break;
case 'S':rt[i].z=1;break;
case 'W':rt[i].z=2;break;
case 'N':rt[i].z=3;break;
}
}
for(int i=1;i<=q;i++){
scanf("%d",&rq[i].k);
getchar();
rq[i].pos=getchar();
scanf("%d",&rq[i].rep);
}
}
bool judge(int k)
{
if(rt[k].x<1||rt[k].x>n||rt[k].y<1||rt[k].y>m){
printf("Robot %d crashes into the wall\n",k);
return false;
}
if(mp[rt[k].x][rt[k].y]){
printf("Robot %d crashes into robot %d\n",k,mp[rt[k].x][rt[k].y]);
return false;
}
mp[rt[k].x][rt[k].y]=k;//修改移动后位置数据;
return true;
}
bool solve()
{
for(int i=1;i<=q;i++){
int k=rq[i].k;
switch(rq[i].pos){
case 'F':
for(int j=1;j<=rq[i].rep;j++){
mp[rt[k].x][rt[k].y]=0;//清空原位置数据;
rt[k].x+=mx[rt[k].z];
rt[k].y+=my[rt[k].z];
if(!judge(k))return false;
}
break;
case 'L':rt[k].z=(rt[k].z-rq[i].rep%4+4)%4;break;
case 'R':rt[k].z=(rt[k].z+rq[i].rep%4)%4;break;
}
}
return true;
}
int main()
{
int T;
scanf("%d",&T);
while(T--){
memset(mp,0,sizeof(mp));
Init();
if(solve())puts("OK");
}
return 0;
}
poj2632 Crashing Robots的更多相关文章
- POJ2632——Crashing Robots
Crashing Robots DescriptionIn a modernized warehouse, robots are used to fetch the goods. Careful pl ...
- POJ2632 Crashing Robots 解题报告
Description In a modernized warehouse, robots are used to fetch the goods. Careful planning is neede ...
- POJ2632 Crashing Robots(模拟)
题目链接. 分析: 虽说是简单的模拟,却调试了很长时间. 调试这么长时间总结来的经验: 1.坐标系要和题目建的一样,要不就会有各种麻烦. 2.在向前移动过程中碰到其他的机器人也不行,这个题目说啦:a ...
- POJ-2632 Crashing Robots模拟
题目链接: https://vjudge.net/problem/POJ-2632 题目大意: 在一个a×b的仓库里有n个机器人,编号为1到n.现在给出每一个机器人的坐标和它所面朝的方向,以及m条指令 ...
- Crashing Robots(imitate)
Crashing Robots Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 8124 Accepted: 3528 D ...
- 模拟 POJ 2632 Crashing Robots
题目地址:http://poj.org/problem?id=2632 /* 题意:几个机器人按照指示,逐个朝某个(指定)方向的直走,如果走过的路上有机器人则输出谁撞到:如果走出界了,输出谁出界 如果 ...
- Crashing Robots 分类: POJ 2015-06-29 11:44 10人阅读 评论(0) 收藏
Crashing Robots Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 8340 Accepted: 3607 D ...
- poj 2632 Crashing Robots
点击打开链接 Crashing Robots Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6655 Accepted: ...
- Poj OpenJudge 百练 2632 Crashing Robots
1.Link: http://poj.org/problem?id=2632 http://bailian.openjudge.cn/practice/2632/ 2.Content: Crashin ...
随机推荐
- 在Powershell ISE中添加sharepoint的智能提示,Enable SharePoint PowerShell Commandlets in the PowerShell ISE
Powershell ISE在默认状态下有一个不好的地方就是不会显示关于SharePoint的一些智能提示,例如你写一个"get-"后面提示的选项里没有sp开头的一些对象.于是找了 ...
- android 最详细的动画大全,包括如何在代码和在XML中使用
一.动画类型 Android的animation由四种类型组成:alpha.scale.translate.rotate XML配置文件中 alpha 渐变透明度动画效果 scale 渐变尺寸伸缩动画 ...
- iOS中UINavigationController控制器使用详解
一.概述 UINavigationController用来管理视图控制器,在多视图控制器中常用.它以栈的形式管理视图控制器,管理视图控制器个数理论上不受限制(实际受内存限制),push和pop方法来弹 ...
- UEditor无法复制的解决方法
今天终于知道UEditor不能复制的真正原因啦,还是自己一直没有仔细研究. UEditor 粘贴 Excell 中的表格时报错导致无法粘贴的解决办法 在UEditor一些版本中,如果粘贴Excell中 ...
- nodejs学习笔记(1)--express安装问题:express不是内部也或者外部的命令解决方案
"Express 是一个简洁而灵活的 node.js Web应用框架, 提供了一系列强大特性帮助你创建各种 Web 应用,和丰富的 HTTP 工具.使用 Express 可以快速地搭建一个完 ...
- spring + spring mvc + mybatis + react + reflux + webpack Web工程例子
前言 最近写了个Java Web工程demo,使用maven构建: 后端使用spring + spring mvc + mybatis: 前端使用react + react-router+ webpa ...
- What every programmer should know about memory 笔记
What every programmer should know about memory, Part 1(笔记) 每个程序员都应该了解的内存知识[第一部分] 2.商用硬件现状 现在硬件的 ...
- Javascript之旅——终点站:困惑的settimeout
有时候结局不是很美好,但起码这也算是一种结局,这个系列的最后一篇settimeout,这是一个让人困惑的函数,也是我一直在吐槽JS的 原因,我们看不到JS的源代码,setimeout同样也是,从始到终 ...
- POST和GET区别
1. get是从服务器上获取数据,post是向服务器传送数据.2. get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到.post是通过H ...
- android viewpager 图片翻页例子
使用ViewPager这个类可以轻松实现多个页面的滑动功能 viewpager默认在工具界面上是找不到的,需求添加android-support-v4.jar包: 如果没有找到,需要打开Android ...