POJ-2632

简介: #include int main(){ int k,a,b,n,m,i,j,num,rep,rect[100][100],robot[100][3]; int flag; char c; for(scanf("%d...
 
#include<stdio.h>
 
int main()
{
    int k,a,b,n,m,i,j,num,rep,rect[100][100],robot[100][3];
    int flag;
    char c;
    for(scanf("%d",&k);k>0;k--)
    {
        scanf("%d%d%d%d",&a,&b,&n,&m);
        for(i=0;i<b;i++)
            for(j=0;j<a;j++) rect[i][j]=0;
        for(i=0;i<n;i++)
        {
            scanf("%d %d %c",&robot[i][1],&robot[i][0],&c);
            robot[i][0]--; robot[i][1]--;
            switch(c)
            {
                case 'N':robot[i][2]=0; break;
                case 'W':robot[i][2]=1; break;
                case 'S':robot[i][2]=2; break;
                case 'E':robot[i][2]=3; break;
            }
            rect[robot[i][0]][robot[i][1]]=i+1;
        }
        flag=1;
        for(i=0;i<m;i++)
        {
            scanf("%d %c %d",&num,&c,&rep); num--;
            for(;rep>0;rep--)
            {
                if (flag){
                if (c=='L') robot[num][2]=(robot[num][2]+1)%4;
                if (c=='R') robot[num][2]=(robot[num][2]-1);
                if (robot[num][2]<0) robot[num][2]+=4;
                if (robot[num][2]<0) robot[num][2]=-robot[num][2];
                if (c=='F')
                    switch(robot[num][2])
                    {
                        case 0:
                             rect[robot[num][0]][robot[num][1]]=0;
                             robot[num][0]++;
                             rect[robot[num][0]][robot[num][1]]+=(num+1);
                             break;
                        case 1:
                             rect[robot[num][0]][robot[num][1]]=0;
                             robot[num][1]--;
                             rect[robot[num][0]][robot[num][1]]+=(num+1);
                             break;
                        case 2:
                             rect[robot[num][0]][robot[num][1]]=0;
                             robot[num][0]--;
                             rect[robot[num][0]][robot[num][1]]+=(num+1);
                             break;
                        case 3:
                             rect[robot[num][0]][robot[num][1]]=0;
                             robot[num][1]++;
                             rect[robot[num][0]][robot[num][1]]+=(num+1);
                             break;
                    }
                if (robot[num][0]<0||robot[num][0]>=b||robot[num][1]<0||robot[num][1]>=a)
                {
                    printf("Robot %d crashes into the walln",num+1);
                    flag=0;
                }
                if (rect[robot[num][0]][robot[num][1]]>(num+1))
                {
                    printf("Robot %d crashes into robot %dn",num+1,rect[robot[num][0]][robot[num][1]]-num-1);
                    flag=0;
                }}
            }
        }
        if (flag) printf("OKn");
    }
    system("pause");
    return 0;
}

题意简述

给定A*B的格子,放入N个机器人,每个机器人初始位置及朝向给定。给定M条指令。指令类型有三种:

1、L:左转90°      2、R:右转90°       3、F:前进一格

问执行指令过程中机器人是否发生碰撞,碰撞包括碰墙或碰其他机器人。安全执行完所有指令输出OK。(程序只需输出发生的第一次碰撞)

算法分析

模拟法。一条一条指令执行。指令执行过程把一条指令重复几遍拆分成几条指令来执行。每执行一条判断是否发生碰撞。若发生碰撞则标记位记0并输出。注意还需继续读取剩余输入。

Problem Status: AC。时间0ms,内存156k

——————————————————————分割线——————————————————————

TIPS:

机器人方向用0~3 四个数字表示四个朝向。转向时自增或自减即可。注意处理转后方向变为负值的情况。

——————————————————————分割线——————————————————————

优化:

POJ最高成绩:内存4k 时间0ms……我现在开始怀疑内存占用和编译器有关系了……太诡异了……


目录
相关文章
|
12月前
|
物联网
物联网卡没使用会产生费用吗
物联网卡的使用费用情况通常取决于多个因素,包括卡片的类型、服务商的政策、套餐选择以及是否激活并实际使用等。对于“物联网卡没使用是否会产生费用”这一问题,答案并非绝对,而是需要根据具体情况来判断。
|
12月前
|
存储 移动开发 前端开发
HTML基础知识:构建网页的基石
【10月更文挑战第11天】HTML基础知识:构建网页的基石
639 0
|
计算机视觉 Python
【python版CV】图像轮廓&模板匹配
【python版CV】图像轮廓&模板匹配
151 1
|
Java 测试技术
JMeter接口性能测试使用
JMeter接口性能测试使用
155 0
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的博物馆展览与服务一体化平台的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的博物馆展览与服务一体化平台的详细设计和实现(源码+lw+部署文档+讲解等)
250 0
|
弹性计算 监控 关系型数据库
利器解读!Linux 内核调测中最最让开发者头疼的 bug 有解了|龙蜥技术
通过在Anolis 5.10 内核中增强 kfence 的功能,实现了一个线上的、精准的、可定制的内存调试解决方案。
利器解读!Linux 内核调测中最最让开发者头疼的 bug 有解了|龙蜥技术
|
存储 安全
FreeRTOS入门教程(队列的概念及相关函数介绍)
FreeRTOS入门教程(队列的概念及相关函数介绍)
312 0
|
数据可视化 物联网
Threejs物联网,工厂3D可视化,加载模型,水流监测,标签动态数据展示
Threejs物联网,工厂3D可视化,加载模型,水流监测,标签动态数据展示
1412 15
Threejs物联网,工厂3D可视化,加载模型,水流监测,标签动态数据展示
|
算法 数据可视化 前端开发
第三代软件开发-自定义Slider(一)
欢迎来到我们的 QML & C++ 项目!这个项目结合了 QML(Qt Meta-Object Language)和 C++ 的强大功能,旨在开发出色的用户界面和高性能的后端逻辑。 在项目中,我们利用 QML 的声明式语法和可视化设计能力创建出现代化的用户界面。通过直观的编码和可重用的组件,我们能够迅速开发出丰富多样的界面效果和动画效果。同时,我们利用 QML 强大的集成能力,轻松将 C++ 的底层逻辑和数据模型集成到前端界面中。 在后端方面,我们使用 C++ 编写高性能的算法、数据处理和计算逻辑。C++ 是一种强大的编程语言,能够提供卓越的性能和可扩展性。我们的团队致力于优化代码,减少资
|
弹性计算
阿里云服务器续费流程(2023新版教程)
阿里云服务器怎么续费?阿里云服务器续费流程新版教程来了,云服务器续费优惠券领取及续费折扣对照表
1445 0
阿里云服务器续费流程(2023新版教程)