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;
}

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

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • UE4投影矩阵[通俗易懂]

    UE4投影矩阵[通俗易懂]UE4投影矩阵正交投影classFOrthoMatrix :publicFMatrix{public: /** *Constructor * *@paramWidthviewspacewidth *@paramHeightviewspaceheight *@paramZScalescaleintheZaxis *@paramZOffsetoffsetintheZaxis */ FOrthoMatrix(flo

    2022年10月5日
    7
  • spi,i2c,uart三种总线的区别_i2c接口是什么意思

    spi,i2c,uart三种总线的区别_i2c接口是什么意思一、SPI I2CUART通信速率比较:SPI&gt;I2C&gt;UART1、同步通信&gt;异步通信;2、同步通信时必须有一根时钟线连接传输的两端;3、都是串行通信方式,并行通信用于内部存储间的通信,如flash;4、适合传输的距离和通信速率成反比关系;3-SPI:两条合一的数据线、1时钟线、1CS(设备片选线) SPI:2数据线、1时钟线、1CS(设备片选线)/串行同步通信…

    2025年11月15日
    4
  • 4个问题带你了解用户画像

    4个问题带你了解用户画像你是否在工作中遇到过以下场景:公司新产品上线,团队一起讨论新产品的用户是谁?优先开拓哪些用户?产品优化时候考虑,目前功能是否满足用户需求?产品页面是用户喜欢的风格吗?投放广告时需要…

    2022年5月15日
    34
  • 解决kali-linux更新源无法使用的问题(签名失效)

    解决kali-linux更新源无法使用的问题(签名失效)本来说是这个寒假好好学习一下渗透测试的,可随着了解的深入,发现渗透测试需要的知识储备太多了,因此好长时间都没有真正的去学习渗透工具的使用,今天上午装了一个kali,装上之后第一件事就是执行apt-getupdate&&apt-getupgrade,结果却出现了这样的错误我添加的是中科大的更新源,在浏览器中是可以正常打开的:debhttp://mirrors.ustc.ed

    2022年5月28日
    220
  • Java面试题大全带答案「建议收藏」

    Java面试题大全带答案「建议收藏」本人发现网上虽然有不少Java相关的面试题,但第一未必全,第二未必有答案,第三虽然有答案,但未必能在面试中说,所以在本文里,会不断收集各种面试题,并站在面试官的立场上,给出我自己的答案。第一部分、Java基础1.JDK和JRE有什么区别?JDK是java的开发工具包,有JDK8,9甚至到14的差别,安装以后,不仅包含了java的开发环境,比如java.exe,还包含了运行环境(jre)相关包。 JRE是java运行环境,一般装好JDK后,系统里会有对应的JRE环境。2..

    2022年6月21日
    35
  • 【Java】lamda表达式

    【Java】lamda表达式lamda表达式1.简介lamda表达式是java语言中函数式编程的一种形式。关于函数式编程,有一句话是这么介绍的,面向对象编程是对数据的抽象,而函数式编程是对行为的抽象。反映到函数的定义上,前者传参是一个对象,后者则是一个函数(对象)。lamda表达式承载了定义函数的方式。2.形式一种是直接定义,可以(a,b)->returna+b这种是直…

    2022年6月1日
    46

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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