zoukankan      html  css  js  c++  java
  • ACM-ICPC 2019 山东省省赛 C Wandering Robot

    在这里插入图片描述

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

    #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;
    }
    
    
  • 相关阅读:
    Tomcat
    二叉树
    CDOJ 1962 天才钱vs学霸周2【最大流】
    次小生成树(POJ1679/CDOJ1959)
    CDOJ1927 爱吃瓜的伊卡洛斯(2) 【并查集】启发式合并+set
    HDU 1074 Doing Homework(DP状态压缩)
    uva 11367 (Dijkstra+DP)
    线段树模板
    openpose pytorch代码分析
    opencv图片坐标和数组下标
  • 原文地址:https://www.cnblogs.com/lunatic-talent/p/12798967.html
Copyright © 2011-2022 走看看