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 ...
随机推荐
- Ajax异步刷新地址栏url改变(利用Html5 history.pushState实现)
早些时候在博客园参阅了不少资料,然后决定入驻博客园分享自己的开发心得,最近准备转方向筹备着辞职交接工作,所以有点忙碌,搁置了一个月才匆匆写下这么一篇随笔,希望能给大家带来一点帮助吧,资料和学识有限,如 ...
- sqlite学习1
Architecture  就像编译器一样,结构分为前端.虚拟机.后端 性能和限制(limitations) 使用B树来做indexes,用B+树来做table.和其他数据库一样 由于不需要鉴权.网 ...
- python 判断学期与学年
9,10,11,12,1 第一学期 2,3,4,5,6,7 第二学期 其中8月份放假,暂且放入第一学期.因为大部分学校都选在8月底开学 import datetime def getXNandXQ() ...
- 一位资深开发的个人经历 【转自百度贴吧 java吧 原标题 4年java 3年产品 现在又开始做android了】
楼主2007年从一家天津的三流大学毕业.毕业前报了一个职位培训,毕业后可以推荐工作.因为推荐的公司都是北京的,所以就来北京了. 找了一个月工作,没有找到要我的,就在出租屋里宅了起来,打着考研的旗号,又 ...
- 安装php扩展
下面我以soap安装为例子 cd /home/zhangy/php-5.2.6/ext/soap /usr/local/php/bin/phpize#确定php-config文件在不在,调用php-c ...
- IntelliJ IDEA 使用总结[zz]
本文转自:http://cowboy-bebop.iteye.com/blog/1035550,仅做稍微整理,转载请注明出处. 1. IDEA内存优化 因机器本身的配置而配置: \IntelliJ I ...
- LCS(Longest Common Subsequence 最长公共子序列)
最长公共子序列 英文缩写为LCS(Longest Common Subsequence).其定义是,一个序列 S ,如果分别是两个或多个已知序列的子序列,且是所有符合此条件序列中最长的,则 S 称为已 ...
- 面试题整理:C#(二)
1.类,接口的区别 从定义的角度类描述一个实体,包括状态.属性和动作接口定义一类动作,没有实现,也没有状态信息从程序的角度接口是函数声明:类是函数实现接口可以有属性,不能有字段一个子类只能继承一个父类 ...
- git浅谈
我们为什么要使用git 应用场景分析 1.使用svn,已经开发完一个需求,正在开发第二个需求,但是测试需要你立刻将你完成的第一个需求提交,请问现在你该怎么做: svn的解决方法大概是这样的:打开提交视 ...
- Oracle视图分类及各种操作讲解(超级好文)
目录:一.视图的定义: 二.视图的作用: 三.创建视图: 1.权限 2.语法 3.1 创建简单视图 3.2 创建连接视图 3.2.1 连接视图定义 3.2.2 创建连接视图 3.2.3 ...