题解 UVA118 【Mutant Flatworld Explorers】

news/2024/7/3 9:20:16

很有趣的一道题,建议先自己写写

具体思路:模拟

只要模拟每次机器人的坐标就好了

难点

  1. 如何表示方向?

    只要将北东南西依此赋值0,1,2,3

    左转该值-1,右转该值+1

  2. 如何行进?

    每个方向坐标变化都是有规律的,不难发现

    int dx[]={0,1,0,-1},
     dy[]={1,0,-1,0};
  3. 如何判断是否掉出世界?

    每次走之前先试探一下就好了。

难点就这些,上代码

#include<bits/stdc++.h>
using namespace std;
int maxx,maxy;
bool warn[105][105];
int face;
char ord[555];
int x,y; 
int dx[]={0,1,0,-1},
    dy[]={1,0,-1,0};
bool check(int a,int b)
{
    if(a<0||a>maxx||b<0||b>maxy)    return false;
    return true;
}   
int main()
{
    cin>>maxx>>maxy;
    while(cin>>x>>y)
    {
        bool flag=0;//标记是否掉出世界 
        memset(ord,0,sizeof(ord));
        char a;
        cin>>a;
        if(a=='N') face=0;
        if(a=='E') face=1;
        if(a=='S') face=2;
        if(a=='W') face=3;
        scanf("%s",&ord);
        for(int i=0;i<strlen(ord);i++)
        {
            if(ord[i]=='L') face=(face+4-1)%4;
            if(ord[i]=='R') face=(face+4+1)%4;
            if(ord[i]=='F')
            {
                int tx=dx[face]+x,ty=dy[face]+y;
                if(check(tx,ty)) 
                {
                    x=tx;
                    y=ty;
                    
                }
                else
                {
                    if(warn[x][y]) continue;
                    warn[x][y]=1;
                    flag=1;
                    break; 
                }
            }
        }
        cout<<x<<" "<<y<<" ";
        if(face==0) cout<<"N";
        if(face==1) cout<<"E";
        if(face==2) cout<<"S";
        if(face==3) cout<<"W";
        if(flag)    cout<<" LOST";
        cout<<endl;
    }
    return 0;
} 

转载于:https://www.cnblogs.com/lizinuo/p/10543877.html


http://www.niftyadmin.cn/n/3297897.html

相关文章

周四。。

昨晚睡了个好觉&#xff0c;虽然做了很多梦。。哈哈 今天上午看了unix的一点shell程序&#xff0c;这个东西看一遍不行我发现。很多符号我不知道什么意思&#xff0c;应该是多用用就熟悉了&#xff0c;嗯。unix脚本里很多都是组合命令&#xff0c;&#xff0c;要分开看。。转载…

redis3.0.0 集群安装详细步骤

Redis集群部署文档(centos6系统) &#xff08;要让集群正常工作至少需要3个主节点&#xff0c;在这里我们要创建6个redis节点&#xff0c;其中三个为主节点&#xff0c;三个为从节点&#xff0c;对应的redis节点的ip和端口对应关系如下&#xff09; 127.0.0.1:7000 127.0.0.1:7…

如何为自定义属性提供下拉选项

上一篇我们讲解到如何为自定义属性提供一个特殊的编辑器。我们的编辑器是一个对话框窗体&#xff0c;点击之后会用Dialog的方式显示。这种情况比较适合于属性比较复杂的情况。 对于某些比较简单的属性&#xff0c;我们可能不希望弹出对话框&#xff0c;而是直接选择。例如下面这…

reids jedis事务处理

当前使用的redis版本 ?12#redis-cli -vredis-cli 2.6.4 MULTI 、EXEC 、DISCARD 和WATCH 是 Redis 事务的基础 1.MULTI 命令用于开启一个事务&#xff0c;它总是返回 OK 。 MULTI 执行之后&#xff0c;客户端可以继续向服务器发送任意多条命令&#xff0c;这些命令不会立即被…

题解 P1111 【修复公路】

题意翻译&#xff1a; 求该图已联通时所用最小时间。 做法&#xff1a; 最小生成树 Krusal算法 先把所有边按修复时间从大到小排序&#xff0c;再每次取出权值最小的边&#xff0c;如果它的两个端点$u,v$已经联通了就跳过&#xff0c;否则就把这条边加入图中&#xff0c;并且把…

linux下的压缩解压缩

Linux下最常用的打包程序就是tar了&#xff0c;使用tar程序打出来的包我们常称为tar包&#xff0c;tar包文件的命令通常都是以.tar结尾的。生成tar包后&#xff0c;就可以用其它的程序来进行压缩了&#xff0c;所以首先就来讲讲tar命令的基本用法&#xff1a; tar命令的选项有很…

Elasticsearch 并发修改乐观锁

来自&#xff1a; http://blog.csdn.net//jiao_fuyou/article/details/50482117 版本控制的一个例子 ?123456789101112131415161718192021curl -XPOST http://localhost:9200/test/test/1 -d {"msg": "test"} {"_index": "test", &qu…

题解 P1886 【滑动窗口】

我用的双端队列来做的 题意就不讲了吧。可以看出来最大值和最小值是同一个问题&#xff0c;改一下大于号和小于号就行了。所以我只讲怎么求最大值吧。 定义一个双端队列&#xff08;相当于queue两端都可以插入或弹出&#xff0c;可以自行百度&#xff09; deque<pair> a,…