POJ2632——Crashing Robots
Crashing Robots
Description
In a modernized warehouse, robots are used to fetch the goods. Careful planning is needed to ensure that the robots reach their destinations without crashing into each other. Of course, all warehouses are rectangular, and all robots 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 first line of input is K, the number of test cases. Each test case starts with one line consisting of two integers, 1 <= A, B <= 100, giving the size of the warehouse in meters. A is the length in the EW-direction, and B in 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
Output one line for each test case:
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
题目大意:给定一个A*B的棋盘,N个机器人,每个机器人都有起始位置,M个指令(x,C,r)代表第x个机器人执行指令C重复r次。
F->向前走一步
L->向左转
R->向右转
若i号机器人撞墙,输出:Robot i crashes into the wall
若i号机器人撞到j号机器人,输出:Robot i crashes into robot j
若M个指令执行完仍无事故发生 输出:OK
解题思路:模拟,写的比较长。。。
Code:
#include<string>
#include<iostream>
#include<stdio.h>
#define INTO_WALL 0
#define INTO_ROBIT -1
#define SAFE 1
using namespace std;
struct Robit
{
int x,y;
int dir;
} R[];
int date1,date2,N,T,M,A,B;;
void step(int i,int dir)
{
if (dir==) R[i].y++;
if (dir==) R[i].x++;
if (dir==) R[i].y--;
if (dir==) R[i].x--;
}
int move(int i,char dir,int dis)
{
if (dir=='L')
for (int j=; j<=dis; j++)
R[i].dir=(R[i].dir-)?(R[i].dir-):;
else if (dir=='R')
for (int j=; j<=dis; j++)
R[i].dir=(R[i].dir-)?(R[i].dir+):;
else
{
for (int j=; j<=dis; j++)
{
step(i,R[i].dir);
if ((R[i].x>=A+||R[i].x<=)||(R[i].y>=B+||R[i].y<=))
{
date1=i;
return INTO_WALL;
}
for (int k=; k<=N; k++)
{
if (k==i) continue;
if (R[k].x==R[i].x&&R[k].y==R[i].y)
{
date1=i,date2=k;
return INTO_ROBIT;
}
}
}
}
return SAFE;
}
int main()
{
int flag=,tmp,meter,ok,i;
char tdir,ctmp;
cin>>T;
while (T--)
{
flag=;
cin>>A>>B;
cin>>N>>M;
for (i=; i<=N; i++)
{
cin>>R[i].x>>R[i].y>>ctmp;
if (ctmp=='N') R[i].dir=;
if (ctmp=='E') R[i].dir=;
if (ctmp=='S') R[i].dir=;
if (ctmp=='W') R[i].dir=;
}
for (i=; i<=M; i++)
{
cin>>tmp>>tdir>>meter;
if (flag) continue;
ok=move(tmp,tdir,meter);
if (ok==SAFE) continue;
else if (ok==INTO_ROBIT)
{
printf("Robot %d crashes into robot %d\n",date1,date2);
flag=;
}
else if (ok==INTO_WALL)
{
printf("Robot %d crashes into the wall\n",date1);
flag=;
}
}
if (!flag) printf("OK\n");
}
return ;
}
POJ2632——Crashing Robots的更多相关文章
- poj2632 Crashing Robots
Crashing Robots Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 9859 Accepted: 4209 D ...
- 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 ...
随机推荐
- Base64编码原理与应用
本文内容转自网络,如需详细内容,请参考相关网址. http://my.oschina.net/goal/blog/201032 代码参考:http://blog.csdn.net/prsniper/a ...
- 服务器 tfs不提供 TeamFoundation服务。基础连接已经关闭
服务器 tfs(服务器名或url)不提供 TeamFoundation服务.基础连接已经关闭,发送时发生错误.TFS突然间连接不上到,到服务器上配置团队项目的组成员资格提示这样的错误,客户端连接的时候 ...
- javascript之DOMReady
DOMReady实现策略 * 在页面的DOM树创建完成后(即HTML解析第一步完成)就触发,而无需等待其他资源的加载,即DOMReady实现策略 * 支持DOMContentLoaded事 ...
- tomcat6.0添加ssi(*.shtml)配置
1.去掉tomcat6中conf/web.xml关于ssi的注释 <servlet> <servlet-name>ssi</servlet-name> <se ...
- DTCMS会员中心快速更改样式思路
非常简便 制作一个public.css文件,包含网站头部和底部的样式代码 每个会员中心模版导入这个文件就可以 把原先style.css的头部和底部样式代码删除
- IAR:Error [Li005]:no definition for"***" 问题之连接
对于 IAR 出现的 Error[Li005] 链接错误,网上已经给出了比较详尽的解决方法,而对于这次记录,主要是记录解决问题的思路. 网上给出的方法:http://blog.csdn.net/yue ...
- MIT 2012 分布式课程基础源码解析-底层通讯实现
本节内容和前节事件管理封装是息息相关的,本节内容主要包含的代码在connection{.h, .cc}中. 这里面最主要的有两个类:connection类和tcpsconn类,connetion类主要 ...
- sqlsever2008及以上各个安装包的说明
LocalDB (SqlLocalDB)LocalDB 是 Express 的一种轻型版本,该版本具备所有可编程性功能,但在用户模式下运行,并且具有快速的零配置安装和必备组件要求较少的特点.如果您需要 ...
- js 操作cookie
jquery.cookie中的操作: jquery.cookie.js是一个基于jquery的插件,点击下载! 创建一个会话cookie: $.cookie(‘cookieName’,'cookieV ...
- Arcgis 10.1中空间连接功能
空间链接的作用:将面上的所有点的值加起来取平均值.赋值给面属性.(我们可以定义右击——定义合并规则 连接要素的字段映射参数中指定的合并规则仅适用于连接要素中的属性,且仅适用于多个要素与目标要素匹配 ( ...