前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ACM-ICPC 2019 山东省省赛 C Wandering Robot

ACM-ICPC 2019 山东省省赛 C Wandering Robot

作者头像
风骨散人Chiam
发布2020-10-28 10:09:55
3540
发布2020-10-28 10:09:55
举报
文章被收录于专栏:CSDN旧文
在这里插入图片描述
在这里插入图片描述

这个题额,我觉的是一道水题,思维题,需要考虑的情况比较多,题意一个机器人给一条指令,循环n遍,问此过程中离原点最远距离。 考虑最远距离可能出现的的情况。 每次循环之后距离至少为0; 1.假设他每一次循环都能回到原点,最远值肯定出现在第一重循环。 2.假设每次循环结束后所移动距离都小于,在某次循环中向某个方向移动的距离。 因为每次循环都会朝某一个方向但是,移动的量过于小,不如一个方向,此时,应考虑N次循环后的的位置,与第一次循环 之后的大小。 比较难理解上图:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

综上所述,只用考虑第一次循环的最大值,跟最后一次循环的最大值谁大即可。 移动是有方向的,对于X,Y都有正负。

代码语言:javascript
复制
#include<iostream>
using namespace std;
long long jdz(long long int a);
const int maxn=1e5+5;
int main()
{
    char ob[maxn];
    int t;
    long long dx,dy,max;
    cin>>t;
    while(t--)
    {
        int n,k;
        dx=dy=max=0;
        cin>>n>>k;
        for(int i=0; i<n; i++)
        {
            cin>>ob[i];
            if(ob[i]=='U') dy++;
            if(ob[i]=='D') dy--;
            if(ob[i]=='L') dx--;
            if(ob[i]=='R') dx++;
            if((jdz(dx)+jdz(dy))>max) max=jdz(dx)+jdz(dy);
            //比赛时,紧张用了好几遍sqrt()难受;
            //编译器出了问题,abs()不能用,蛋疼;
        }
        dx=(k-1)*dx;
        dy=(k-1)*dy;
        for(int i=0; i<n; i++)
        {
            if(ob[i]=='U') dy++;
            if(ob[i]=='D') dy--;
            if(ob[i]=='L') dx--;
            if(ob[i]=='R') dx++;
            if((jdz(dx)+jdz(dy))>max) max=jdz(dx)+jdz(dy);
        }
        cout<<max<<endl;
    }
}
long long jdz(long long int a)
{
    if(a>0) return a;
    else return -a;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/05/13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档