zoukankan      html  css  js  c++  java
  • Rabbit的机器人-二分答案

    Rabbit的机器人

    思路 : 可以 推知 挡板的位置与最后 一步的方向有关 。如果是 R 根据题目要求那么最终结果一定是在>0的位置,

    因为按照题意要求的最终不能回到重复走过的位置。所以如果有解的话挡板只能放在 < 0 的位置,分析一下就是 放在 >0的位置有

    两种情况 1 .在最终结果前面 ,这显然不可以 会直接导致走不过去,2.放在最终结果后面, 这似乎是个无用操作,,

    所以 只能是 在<0的位置,而且有一个性质,那放在 <0的情况来说 就是 如果 x位置是正确的那么 x +1 的位置也正确,当然 ( x + 1 ) < 0.

    感性理解一下 ,  放挡板是为了 让最终能够到达一个新的地方 , 挡板的作用就是 阻止一些向与最终方向相反的行动。分析完这些之后

    发现可以二分答案 找一个最左的 放挡板的位置 即可。

    #include<bits/stdc++.h>
    using namespace std;
    #define maxn 1234567
    char str[maxn];
    int n,l,r,ans;
    bool ok(int x)
    {
        int now=0,ml=0,mr=0;
        for(int i=0; i<n; i++)
        {
            if(str[i]=='R')
            {
                now++;
                if(now==x)now--;
            }
            else
            {
                now--;
                if(now==x)now++;
            }
            if(i<n-1)
            {
                ml=min(now,ml);
                mr=max(now,mr);
            }
        }
        if(str[n-1]=='R'&&now>mr)return true;
        if(str[n-1]=='L'&&now<ml)return true;
        return false;
    }
    int main()
    {
        scanf("%d",&n);
        scanf("%s",str);
        if(str[n-1]=='R')
        {
            r=n;
            while(l-1<r)
            {
                int mid=(r+l)/2;
                if(ok(mid))
                    r=mid-1;
                else l=mid+1;
            }
            if(l>=0)
                printf("-1
    ");
            else if(l==-n)printf("0 1
    ");
            else printf("1 %d
    ",-l);
        }
        else
        {
            r=n;
            while(l-1<r)
            {
                int mid=(r+l)/2;
                if(ok(mid))
                    l=mid+1;
                else r=mid-1;
            }
            if(r<=0)
                printf("-1
    ");
            else if(r==n)printf("0 1
    ");
            else printf("1 %d
    ",r);
        }
        return 0;
    }
    

      

  • 相关阅读:
    【转】Rhythm Of The Rain 雨的旋律
    【转】Mysql中文乱码的几个解决方法
    【转】XAMPP不能正常启动Apache的解决方案
    【转】Cotton Fields 家乡的棉花田
    ArrayList排序Sort()方法
    数据库锁表的分析与解决
    数据从Excel到DataSet图解
    C# 多态例子【原创】
    Collection List Set和Map用法与区别 (转载)
    G711 G723 G729线路占多少带宽问题
  • 原文地址:https://www.cnblogs.com/SDUTNING/p/10255835.html
Copyright © 2011-2022 走看看