poj -2632 Crashing Robots

poj -2632 Crashing Robots

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

http://poj.org/problem?id=2632

Crashing Robots
Time Limit: 1000MS   Memory Limit: 65536K
Total Submissions: 7470   Accepted: 3265

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.
 



poj -2632 Crashing Robots
 

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

 
//赤裸裸的模拟,開始有点卡,就是依照题意一步步来就好了,注意是假设碰撞就标记。仅仅推断第一次就好。
#include<cstdio>
#include<cstring>
struct point
{
    int x,y;
    char c;
}f[105];
struct node
{
    int x,y;
    char c;
}ff[105];
int a,b,n,m;
bool check(int k)  //推断函数,開始就是有点卡这里
{
    int i;
    if(f[k].x<=0||f[k].x>a||f[k].y<=0||f[k].y>b) //跟墙碰撞
    {
        printf("Robot %d crashes into the wall\n",k);
        return 1;
    }
    for(i=1;i<=n;i++)   //跟其他机器人碰撞
    {
        if(i==k) continue;
        if(f[k].x==f[i].x&&f[k].y==f[i].y)
        {
           printf("Robot %d crashes into robot %d\n",k,i);
           return 1;
        }
    }
    return 0;
}
int main()
{
    //freopen("a.txt","r",stdin);
    int t,i,j,l,k,flag;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d%d%d%d",&a,&b,&n,&m);
        for(i=1;i<=n;i++)
        {
            scanf("%d%d %c",&f[i].x,&f[i].y,&f[i].c);
            //printf("%d%d%c\n",f[i].x,f[i].y,f[i].c);
        }
        flag=0;
        for(i=1;i<=m;i++)
        {
            scanf("%d %c %d",&ff[i].x,&ff[i].c,&ff[i].y);
            //printf("%d%c%d\n",ff[i].x,ff[i].c,ff[i].y);
            //
            k=ff[i].x;
            if(ff[i].c=='L')
            {
                l=ff[i].y%4; //4个方向一个周期  看剩下多少步
                for(j=1;j<=l;j++)
                {
                    if(f[k].c=='N')
                        f[k].c='W';
                    else if(f[k].c=='E')
                        f[k].c='N';
                    else if(f[k].c=='S')
                        f[k].c='E';
                    else if(f[k].c=='W')
                        f[k].c='S';
                }
            }
            else if(ff[i].c=='R')  
            {
                l=ff[i].y%4; //同理
                for(j=1;j<=l;j++)
                {
                    if(f[k].c=='N')
                        f[k].c='E';
                    else if(f[k].c=='E')
                        f[k].c='S';
                    else if(f[k].c=='S')
                        f[k].c='W';
                    else if(f[k].c=='W')
                        f[k].c='N';
                }
            }
            else
            {
                l=ff[i].y;
                if(!flag)   //仅仅须要推断一次即可。
                {
                for(j=1;j<=l;j++)
                {
                    if(f[k].c=='N')
                    {
                        f[k].y++;
                        flag=check(k);
                        if(flag)break;
                    }
                    else if(f[k].c=='W')
                    {
                        f[k].x--;
                        flag=check(k);
                        if(flag)break;
                    }
                    else if(f[k].c=='S')
                    {
                        f[k].y--;
                        flag=check(k);
                        if(flag) break;
                    }
                    else if(f[k].c=='E')
                    {
                        f[k].x++;
                        flag=check(k);
                        if(flag)break;
                    }
                }
                }
            }
        }
        if(!flag) printf("OK\n");
    }
    return 0;
}

版权声明:本文博主原创文章,博客,未经同意不得转载。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/116827.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • vci驱动安装_deviceiocontrol函数

    vci驱动安装_deviceiocontrol函数1.获取所有的驱动器利用函数GetLogicalDriveStringsTheGetLogicalDriveStringsfunctionfillsabufferwithstringsthatspecifyvaliddrivesinthesystem.DWORDGetLogicalDriveStrings(DWORDnBufferLength

  • 数据库原理课程设计—停车场管理系统

    数据库原理课程设计—停车场管理系统数据库原理课程设计—停车场管理系统停车场收费管理系统是现代化停车场车辆收费及设备自动化管理的一个统称,是将停车场完全置于计算机统一管理下的高科技机电一体化产品。人们对停车场管理的要求越来越高,智能化程度越来越高,使用更加方便快捷。不仅提高了现代人类的工作效率,也大大的节约了人力物力,价低了公司的运营成本。它通过只能设备使感应卡记录及持卡人进出的相关信息,同时对其信息加以运算、传送并通过字符显示、语音播报等人机界面转化成人工能够辨别和判断的信号,从而实现计时收费、车辆管理等目的。针对用户的不同需求,

  • java生成pfx_JAVA代码-数字证书公私钥生成-公钥cer ,私钥jks, pfx格式

    java生成pfx_JAVA代码-数字证书公私钥生成-公钥cer ,私钥jks, pfx格式importjava.io.File;importjava.io.FileInputStream;importjava.io.FileOutputStream;importjava.io.FileWriter;importjava.io.IOException;importjava.math.BigInteger;importjava.security.InvalidKeyException;im…

  • 【转】推荐几个免费下载激活成功教程软件的网站以及系统「建议收藏」

    【转】推荐几个免费下载激活成功教程软件的网站以及系统「建议收藏」今天想给大家推荐一些免费下载激活成功教程软件的网站,希望能帮助到大家!第一个要推荐的就CSDN自己的下载资源网站:https://download.csdn.net/推荐的原因主要是资源够全,一般网上有的这里都有,而且下载的时候能看到其他下载者的真实评价,但是有点不好的就是对新人不太友好,虽然有很多免积分的,但是一些新的资源都需要积分,不过人人为我,我为人人,在这里赚扣分也是很简单的事,只要你能上…

  • 程序员法则_智脑黑客

    程序员法则_智脑黑客1.作为一个真正的程序员,首先应该尊重编程,热爱你所写下的程序,他是你的伙伴,而不是工具。2.程序员可以让步,却不可以退缩,可以羞涩,却不可以软弱,总之,程序员必须是勇敢的。3.编程是一种单调的生活,因此程序员比普通人需要更多的关怀,更多的友情。4.程序不是年轻的专利,但是,他属于年轻。5.没有情调,不懂浪漫,也许这是程序员的一面,但拥有朴实无华的爱是他们的另一面。6.一个好汉

  • vue的form表单提交_axios提交表单

    vue的form表单提交_axios提交表单利用v-model能比较便捷地上传用户信息的数据,不用一个个参数地拼接。直接在data根据要传的字段定义一个对象,再利用双向绑定得到值。下面写了传json格式跟formData格式的两种情况,根据实际参考<template><divclass=”from_box”><formaction=””><inputty……

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号