Crashing Robots 分类: POJ 2015-06-29 11:44 10人阅读 评论(0) 收藏
Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 8340 | Accepted: 3607 |
Description
occupy a circular floor space with a diameter of 1 meter. Assume there are N robots, numbered from 1 through N. You will get to know the position and orientation of each robot, and all the instructions, which are carefully (and mindlessly) followed by the
robots. Instructions are processed in the order they come. No two robots move simultaneously; a robot always completes its move before the next one starts moving.
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 NS-direction.
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
- 模拟题
#include <iostream> #include <cstring> #include <cstdio> #include <cmath> #include <string> #include <stack> #include <queue> #include <vector> #include <algorithm> using namespace std; const int Max=1100000; struct node { int dir; int x; int y; } Robot[110]; struct INS { int num; int action; int repeat; } Order[110]; bool Map[110][110]; int Dir[4][2]= {{1,0},{0,-1},{-1,0},{0,1}}; int A,B; int n,m; int Handle(int s) { if(s=='S'||s=='R') { return 1; } if(s=='N') { return 3; } if(s=='E'||s=='F') { return 0; } if(s=='W') { return 2; } if(s=='L') return -1; return 0; } bool Mon() { for(int i=0; i<m; i++) { if(Order[i].action==1) { while(Order[i].repeat--) { Robot[Order[i].num].dir++; if(Robot[Order[i].num].dir==4) { Robot[Order[i].num].dir=0; } } } else if(Order[i].action==-1) { while(Order[i].repeat--) { Robot[Order[i].num].dir--; if(Robot[Order[i].num].dir==-1) { Robot[Order[i].num].dir=3; } } } else if(Order[i].action==0) { while(Order[i].repeat--) { Map[Robot[Order[i].num].x][Robot[Order[i].num].y]=false; Robot[Order[i].num].x+=Dir[Robot[Order[i].num].dir][0]; Robot[Order[i].num].y+=Dir[Robot[Order[i].num].dir][1]; if(Robot[Order[i].num].x==0||Robot[Order[i].num].x==A+1||Robot[Order[i].num].y==0||Robot[Order[i].num].y==B+1) { printf("Robot %d crashes into the wall\n",Order[i].num); return false; } else if(Map[Robot[Order[i].num].x][Robot[Order[i].num].y]) { for(int j=1; j<=n; j++) { if(j!=Order[i].num&&Robot[j].x==Robot[Order[i].num].x&&Robot[j].y==Robot[Order[i].num].y) { printf("Robot %d crashes into robot %d\n",Order[i].num,j); return false; } } } else { Map[Robot[Order[i].num].x][Robot[Order[i].num].y]=true; } } } } return true; } int main() { int T; char s; scanf("%d",&T); while(T--) { scanf("%d %d",&A,&B); scanf("%d %d",&n,&m); memset(Map,false,sizeof(Map)); for(int i=1; i<=n; i++) { scanf("%d %d %c",&Robot[i].x,&Robot[i].y,&s); Map[Robot[i].x][Robot[i].y]=true; Robot[i].dir=Handle(s); } for(int i=0; i<m; i++) { scanf("%d %c %d",&Order[i].num,&s,&Order[i].repeat); Order[i].action=Handle(s); } if(Mon()) { printf("OK\n"); } } return 0;}
版权声明:本文为博主原创文章,未经博主允许不得转载。
Crashing Robots 分类: POJ 2015-06-29 11:44 10人阅读 评论(0) 收藏的更多相关文章
- 百度编辑器UEditor ASP.NET示例Demo 分类: ASP.NET 2015-01-12 11:18 346人阅读 评论(0) 收藏
在百度编辑器示例代码基础上进行了修改,封装成类库,只需简单配置即可使用. 完整demo下载 版权声明:本文为博主原创文章,未经博主允许不得转载.
- Train Problem I 分类: HDU 2015-06-26 11:27 10人阅读 评论(0) 收藏
Train Problem I Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- Least Common Ancestors 分类: ACM TYPE 2014-10-19 11:24 84人阅读 评论(0) 收藏
#include <iostream> #include <cstdio> #include <cstring> #include <cmath> #i ...
- 二分图匹配(KM算法)n^4 分类: ACM TYPE 2014-10-04 11:36 88人阅读 评论(0) 收藏
#include <iostream> #include<cstring> #include<cstdio> #include<cmath> #incl ...
- Segment Tree with Lazy 分类: ACM TYPE 2014-08-29 11:28 134人阅读 评论(0) 收藏
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; stru ...
- 8大排序算法图文讲解 分类: Brush Mode 2014-08-18 11:49 78人阅读 评论(0) 收藏
排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存. 常见的内部排序算法有:插入排序.希尔排序. ...
- C语言之void类型及void指针 分类: C/C++ 2015-07-13 11:24 8人阅读 评论(0) 收藏
原文网址:http://www.cnblogs.com/pengyingh/articles/2407267.html 1.概述 许多初学者对C/C 语言中的void及void指针类型不甚理解,因此在 ...
- 指向函数的指针 分类: C/C++ 2015-07-13 11:03 14人阅读 评论(0) 收藏
原文网址:http://www.cnblogs.com/zxl2431/archive/2011/03/25/1995285.html 讲的很清楚,备份记录. (一) 用函数指针变量调用函数 可以用指 ...
- iOS调用相机,相册,上传头像 分类: ios技术 2015-04-14 11:23 256人阅读 评论(0) 收藏
一.新建工程 二.拖控件,创建映射 三.在.h中加入delegate @interface ViewController : UIViewController 复制代码 四.实现按钮事件 -(IBAc ...
随机推荐
- log4cxx安装和使用
log4cxx是Java社区著名的log4j的c++移植版,用于为C++程序提供日志功能,以便开发者对目标程序进行调试和审计,log4cxx是apache软件基金会的开源项目,基于APR实现跨平台支持 ...
- PostgreSQL Replication之第十一章 使用Skytools(5)
11.5 关于walmgr 的介绍 walmgr 是一个简化基于文件事务日志传输的工具.早在过去的一些日子里(在9.0版本之前),使用walmgr来简化基本备份是很常见的.随着流复制的引入,情况有了一 ...
- Lintcode: Product of Array Exclude Itself
Given an integers array A. Define B[i] = A[0] * ... * A[i-1] * A[i+1] * ... * A[n-1], calculate B wi ...
- java中Date的getTime() 方法奇葩问题
今天遇到了一个奇葩问题: 从数据库中读取了3个Date类型的数据: DATE1:2015-03-12 12:10:42 DATE2:2015-03-12 12:04:40 DATE3:2015-03- ...
- 判断java中两个对象是否相等
java中的基本数据类型判断是否相等,直接使用"=="就行了,相等返回true,否则,返回false. 但是java中的引用类型的对象比较变态,假设有两个引用对象obj1,obj2 ...
- JAVA通过poi对Excel数据在(jsp+ssh)环境下导入导出
POI的下载与安装 请到网站http://www.apache.org/dyn/closer.cgi/poi/右击超链接2.5.1.zip下载压缩包poi-bin-2.5.1-final-20040 ...
- -Xloggc:log/gc.log 指定GC log的位置
-Xloggc:log/gc.log指定GC log的位置,以文件输出帮助开发人员分析问题
- oracle的用户
1:创建用户 create user zhaoyb identified by zhaoyb default tablespace HUAPUSALEDB create user 用户名 identi ...
- jQuery讲解
在讲解jQuery时,要和JavaScript进行对比的讲解,易于理解 JavaScript部分 <title>jquery讲解使用</title> <script sr ...
- [OrangePi] If you are using an older image
Download scriptbin_kernel.tar.gz from Mega, unpack. Copy uImage_OPI-2 or uImage_OPI-PLUS (depending ...