Crashing Robots
Time Limit: 1000MS   Memory Limit: 65536K
Total Submissions: 8124   Accepted: 3528

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 warehouseFinally 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

Source

 #include<stdio.h>
#include<iostream>
#include<math.h>
#include<string.h>
using namespace std;
struct robot
{
int x , y ;
int dir ;
}a[]; struct instruction
{
int num ;
char act ;
int rep ;
}ins[]; int EW , NS ;
int n , m ;
bool flag ;
int map[][]; void crash (int No)
{
int k = ins[No].rep ;
int t = ins[No].num ;
map[a[t].x][a[t].y] = ;
switch (a[t].dir)
{
case :
for (int i = ; i < k && a[t].x && a[t].y ; i++)
if (map[a[t].x][++a[t].y]) {
flag = ;
printf ("Robot %d crashes into robot %d\n" , t , map[a[t].x][a[t].y]) ;
break ;
}
break ;
case :
for (int i = ; i < k && a[t].x && a[t].y ; i++)
if (map[++a[t].x][a[t].y]) {
flag = ;
printf ("Robot %d crashes into robot %d\n" , t , map[a[t].x][a[t].y]) ;
break ;
}
break ;
case :
for (int i = ; i < k && a[t].x && a[t].y ; i++)
if (map[a[t].x][--a[t].y]) {
flag = ;
printf ("Robot %d crashes into robot %d\n" , t , map[a[t].x][a[t].y]) ;
break ;
}
break ;
case :
for (int i = ; i < k && a[t].x && a[t].y; i++)
if (map[--a[t].x][a[t].y]) {
flag = ;
printf ("Robot %d crashes into robot %d\n" , t , map[a[t].x][a[t].y]) ;
break ;
}
break ;
}
map[a[t].x][a[t].y] = t ;
if (a[t].x == || a[t].x >= EW + || a[t].y == || a[t].y >= NS + ) {
printf ("Robot %d crashes into the wall\n" , t) ;
flag = ;
}
}
void solve (int No)
{
int k = ins[No].num ;
switch (ins[No].act)
{
case 'L' : a[k].dir -= ins[No].rep ; a[k].dir %= ; a[k].dir += ; a[k].dir %= ; break ;
case 'R' : a[k].dir += ins[No].rep ; a[k].dir %= ; a[k].dir += ; a[k].dir %= ; break ;
case 'F' : crash (No) ;
}
}
int main ()
{
// freopen ("a.txt" , "r" , stdin) ;
int T ;
scanf ("%d" , &T) ;
char temp ;
while (T--) {
memset (map , , sizeof(map) ) ;
scanf ("%d%d" , &EW , &NS) ;
scanf ("%d%d" , &n , &m) ;
for (int i = ; i <= n ; i++) {
cin >> a[i].x >> a[i].y >> temp ;
// cout << temp <<endl ;
map[a[i].x][a[i].y] = i ;
switch (temp)
{
case 'E' : a[i].dir = ; break ;
case 'S' : a[i].dir = ; break ;
case 'W' : a[i].dir = ; break ;
case 'N' : a[i].dir = ; break ;
}
// printf ("a[%d].dir=%d\n" , i , a[i].dir) ;
}
for (int i = ; i < m ; i++)
cin >> ins[i].num >> ins[i].act >> ins[i].rep ; flag = ;
// printf ("a[1].dir=%d\n" , a[1].dir) ;
for (int i = ; i < m ; i++) {
/* for (int i = 1 ; i <= EW ; i++) {
for (int j = 1 ; j <= NS ; j++) {
printf ("%d " , map[i][j]) ;
}
puts("");
}
puts ("") ;*/
solve (i) ;
/* for (int i = 1 ; i <= EW ; i++) {
for (int j = 1 ; j <= NS ; j++) {
printf ("%d " , map[i][j]) ;
}
puts("");
}
printf ("\n\n\n") ; */
if (flag)
break ;
} if (!flag)
puts ("OK") ;
}
return ;
}

规规矩矩得模拟 robot 一步步走就行了

Crashing Robots(imitate)的更多相关文章

  1. POJ2632 Crashing Robots(模拟)

    题目链接. 分析: 虽说是简单的模拟,却调试了很长时间. 调试这么长时间总结来的经验: 1.坐标系要和题目建的一样,要不就会有各种麻烦. 2.在向前移动过程中碰到其他的机器人也不行,这个题目说啦:a ...

  2. poj 2632 Crashing Robots(模拟)

    链接:poj 2632 题意:在n*m的房间有num个机器,它们的坐标和方向已知,现给定一些指令及机器k运行的次数, L代表机器方向向左旋转90°,R代表机器方向向右旋转90°,F表示前进,每次前进一 ...

  3. Codeforces Round #625 (Div. 2, based on Technocup 2020 Final Round) A. Contest for Robots(数学)

    题意: n 道题,2 个答题者,已知二者的做题情况,你是受贿裁判,可以给每题指定分值(≥1),求甲乙分数(甲>乙)相差最小时最大分值的最小值. 思路: 统计只有甲或乙做出的题目数. 加一取下整判 ...

  4. POJ 2632 Crashing Robots(较为繁琐的模拟)

    题目链接:http://poj.org/problem?id=2632 题目大意:题意简单,N个机器人在一个A*B的网格上运动,告诉你机器人的起始位置和对它的具体操作,输出结果: 1.Robot i ...

  5. ZOJ 1654 Place the Robots(最大匹配)

    Robert is a famous engineer. One day he was given a task by his boss. The background of the task was ...

  6. [AGC004E] Salvage Robots (DP)

    Description 蛤蟆国的领土我们可以抽象为H*W的笼子,在这片蛤土上,有若干个机器人和一个出口,其余都是空地,每次蛤蟆会要求让所有的机器人向某个方向移动一步,当机器人移动到出口时会被蛤蟆活摘出 ...

  7. 【ZOJ1003】Crashing Balloon(DFS)

    Crashing Balloon Time Limit: 2 Seconds      Memory Limit: 65536 KB On every June 1st, the Children's ...

  8. UVALive 7464 Robots (贪心)

    Robots 题目链接: http://acm.hust.edu.cn/vjudge/contest/127401#problem/K Description http://7xjob4.com1.z ...

  9. UVALive 7464 Robots(模拟)

    7464Robots Write a program to collect data from robots. We are given two sets of robotsX=fX1;:::;Xmg ...

随机推荐

  1. Enum扩展及MVC中DropDownListFor扩展方法的使用

    public enum SearchState { /// <summary> /// 全部 /// </summary> [Description("全部" ...

  2. 使用DOM动态创建标签

    本文是参考<javascript Dom 编程艺术>第八章的内容所写,用到的知识点,就是关于创建平稳的web页面. 使用DOM方法: getElementById() getElement ...

  3. 阿里面试回来,想和Java程序员谈一谈(转载)

    引言 其实本来真的没打算写这篇文章,主要是LZ得记忆力不是很好,不像一些记忆力强的人,面试完以后,几乎能把自己和面试官的对话都给记下来.LZ自己当初面试完以后,除了记住一些聊过的知识点以外,具体的内容 ...

  4. 常用的Java 架包(jar)的用途

    前言:如果需要在项目中引入jar包,可以采用maven,配置方式在 http://mvnrepository.com 查询  slf4j-api 简介:slf4j并不是一种具体的日志系统,而是一个用户 ...

  5. Java设计模式-抽象工厂模式(Abstract Factory )

    工厂方法模式有一个问题就是,类的创建依赖工厂类,也就是说,如果想要拓展程序,必须对工厂类进行修改,这违背了闭包原则,所以,从设计角度考虑,有一定的问题,如何解决?就用到抽象工厂模式,创建多个工厂类,这 ...

  6. 13. (转) Android一些布局属性详解

    RelativeLayout用到的一些重要的属性: 第一类:属性值为true或false     android:layout_centerHrizontal  水平居中      android:l ...

  7. 【BZOJ-3651&3081】网络通信&StrangeRegulations Link-Cut-Tree

    3651: 网络通信 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 90  Solved: 61[Submit][Status][Discuss] D ...

  8. BZOJ-2929 洞穴攀岩 最大流Dinic(傻逼题)

    竟然没有1A真羞耻...1分钟不到读完题,10分钟不到打完....MD没仔细看...WA了一遍,贱! 2929: [Poi1999]洞穴攀行 Time Limit: 1 Sec Memory Limi ...

  9. BZOJ-2186 沙拉公主的困惑 线性筛(筛筛筛)+线性推逆元

    2186: [Sdoi2008]沙拉公主的困惑 Time Limit: 10 Sec Memory Limit: 259 MB Submit: 2417 Solved: 803 [Submit][St ...

  10. 搭建一个springMVC项目以及遇到的问题

    首先找到jar包(lz现在还在学习maven,以后回了,就用maven了,自己配置时,jar包不全就很容易到时搭建失败)