Crashing Robots
Time Limit: 1000MS   Memory Limit: 65536K
Total Submissions: 8388   Accepted: 3631

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

Source

 
 
 
 
 
 
给跪了
做的时候不到一个小时就完事了。结果找bug找了4个小时,就是一个变量写错了,怎么都找不到啊
 
zuile,醉了
#include<iostream>
#include<stdio.h>
#include<string.h>
using  namespace std;
struct node{
    int x;
    int y;
    int z;
}que[200];
int next[4][2]= {0,1,-1,0,0,-1,1,0};
int ans, tx,ty;

int vis[105][105];
int y,x;
void update1(){
    int xx=que[tx].x;
    int yy=que[tx].y;
    int zz=que[tx].z;
    for(int i=1; i<=ty; i++){
        xx+=next[zz][0];
        yy+=next[zz][1];
        if(xx<1||xx>x||yy<1||yy>y){
            printf("Robot %d crashes into the wall\n",tx);
            ans=1;
           return;
        }
         if(vis[xx][yy]!=0){
            printf("Robot %d crashes into robot %d\n",tx,vis[xx][yy]);
            ans=1;
        return;
        }
    }
     vis[xx][yy]=tx;
    vis[que[tx].x][que[tx].y]=0;
    que[tx].x=xx;
    que[tx].y=yy;

}
void update2(){
      que[tx].z=(que[tx].z+ty%4)%4;
}
void update3(){
     que[tx].z=(que[tx].z-ty%4+4)%4;
}
int main(){
    int t,n,m;
    char c;
    scanf("%d",&t);
    while(t--){
        memset(vis,0,sizeof(vis));
        memset(que,0,sizeof(que));
        scanf("%d%d",&x,&y);
        scanf("%d%d",&n,&m);
        for(int i=1; i<=n; i++){
            scanf("%d %d %c",&que[i].x,&que[i].y,&c);
            if(c=='N')  que[i].z=0;
             else  if(c=='W')     que[i].z=1;
              else if(c=='S')    que[i].z=2;
              else  if(c=='E')     que[i].z=3;
              vis[que[i].x][que[i].y]=i;
        }
        ans=0;
        for(int i=1; i<=m; i++){
           scanf("%d %c %d",&tx,&c,&ty);
            if(ans==0){
            if(c=='F')
                update1();
            else  if(c=='L')
                update2();
            else  if(c=='R')
                update3();
            }
        }
        if(ans==0)
            printf("OK\n");

}
    return 0;
}

poj2632 模拟的更多相关文章

  1. POJ-2632 Crashing Robots模拟

    题目链接: https://vjudge.net/problem/POJ-2632 题目大意: 在一个a×b的仓库里有n个机器人,编号为1到n.现在给出每一个机器人的坐标和它所面朝的方向,以及m条指令 ...

  2. POJ2632 Crashing Robots(模拟)

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

  3. poj2632 【模拟】

    In a modernized warehouse, robots are used to fetch the goods. Careful planning is needed to ensure ...

  4. App开发:模拟服务器数据接口 - MockApi

    为了方便app开发过程中,不受服务器接口的限制,便于客户端功能的快速测试,可以在客户端实现一个模拟服务器数据接口的MockApi模块.本篇文章就尝试为使用gradle的android项目设计实现Moc ...

  5. 故障重现, JAVA进程内存不够时突然挂掉模拟

    背景,服务器上的一个JAVA服务进程突然挂掉,查看产生了崩溃日志,如下: # Set larger code cache with -XX:ReservedCodeCacheSize= # This ...

  6. Python 爬虫模拟登陆知乎

    在之前写过一篇使用python爬虫爬取电影天堂资源的博客,重点是如何解析页面和提高爬虫的效率.由于电影天堂上的资源获取权限是所有人都一样的,所以不需要进行登录验证操作,写完那篇文章后又花了些时间研究了 ...

  7. HTML 事件(四) 模拟事件操作

    本篇主要介绍HTML DOM中事件的模拟操作. 其他事件文章 1. HTML 事件(一) 事件的介绍 2. HTML 事件(二) 事件的注册与注销 3. HTML 事件(三) 事件流与事件委托 4.  ...

  8. 模拟AngularJS之依赖注入

    一.概述 AngularJS有一经典之处就是依赖注入,对于什么是依赖注入,熟悉spring的同学应该都非常了解了,但,对于前端而言,还是比较新颖的. 依赖注入,简而言之,就是解除硬编码,达到解偶的目的 ...

  9. webapp应用--模拟电子书翻页效果

    前言: 现在移动互联网发展火热,手机上网的用户越来越多,甚至大有超过pc访问的趋势.所以,用web程序做出仿原生效果的移动应用,也变得越来越流行了.这种程序也就是我们常说的单页应用程序,它也有一个英文 ...

随机推荐

  1. IOS 遍历未知对象的属性和方法

    /* 注意:要先导入ObjectC运行时头文件,以便调用runtime中的方法*/ #import <objc/runtime.h> @implementation NSObject (P ...

  2. 每天一个linux命令(38):vmstat命令

    vmstat 是Virtual Meomory Statistics(虚拟内存统计)的缩写,可对操作系统的虚拟内存.进程.CPU活动进行监控.他是对系统的整体 情况进行统计,不足之处是无法对某个进程进 ...

  3. JavaEE EL的一些用法

    EL 可以在指示元素中设置EL是否使用 isELIgnored="true" true是不使用 也可以在web.xml中使用 <jsp-config> <jsp- ...

  4. JMeter 测试Web登录

    JMeter测试 前置条件: 1安装JMeter 下载地址:http://jmeter.apache.org/ 2安装badBoy http://www.badboy.com.au/download/ ...

  5. Opentack常用技巧

    这篇博客将收集一些openstack里的使用技巧. 1. which dhcp agent is hosting the network?   2. 各个网桥port命令规则 grep for por ...

  6. Codeforces Round #342 (Div 2) 解题报告

    除夕夜之有生之年CF第一场 下午从奶奶家回到姥姥家,一看还有些时间,先吃点水果陪姥姥姥爷聊了会儿,再一看表,5:20....woc已经开场20分钟了...于是抓紧时间乱搞.. **A. Guest F ...

  7. Selenium2+python自动化13-Alert

    不是所有的弹出框都叫alert,在使用alert方法前,先要识别出它到底是不是alert.先认清楚alert长什么样子,下次碰到了,就可以用对应方法解决.alert\confirm\prompt弹出框 ...

  8. Apple的App Analytics统计平台你必须知道的Q&A整理与翻译

    Apple的App Analytics统计平台你必须知道的Q&A整理与翻译 Apple最近在iTunesConnect里最新发布了App Analytics统计平台,提供了现有友盟统计平台和自 ...

  9. -----------------------------------项目中整理的非常有用的PHP函数库(一)-----------------------------------------------------

    1.PHP加密解密 PHP加密和解密函数可以用来加密一些有用的字符串存放在数据库里,并且通过可逆解密字符串,该函数使用了base64和MD5加密和解密. function encryptDecrypt ...

  10. rockmongo用法

    .简单查询 //xid=560870 and type=video { , "type": "video" } //查询数组中的数据 array( " ...