• Codeforces 847E


    847E - Packmen

    思路:二分时间。

    代码:

    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long 
    #define pb push_back
    #define mem(a,b) memset(a,b,sizeof(a))
    int n;
    string s;
    
    bool check(int t)
    {
        int now=-1,bean=-2;//now是上一个P覆盖到的位置,bean是没有被上一个P覆盖到的第一个星星 
        for(int i=0;i<n;i++)
        {
            if(s[i]=='*')
            {
                if(bean<=now)bean=i;
            }
            else if(s[i]=='P')
            {
                if(now<bean)
                {
                    if(i-bean>t)return false;
                    else now=max((t-(i-bean))/2+i,bean+t-(i-bean));//P有两种走法,一种先往前再往后,另一种先往后再往前 
                }
                else  
                {
                    now=i+t;
                }
            }
        }
        return now>=bean;
    }
    
    int binasrh(int l,int r)
    {
        if(l==r)return l;
        int m=(l+r)>>1;
        if(check(m))binasrh(l,m);
        else binasrh(m+1,r);
    }
    int main()
    {
        ios::sync_with_stdio(false);
        cin.tie(0);
        cin>>n>>s;
        cout<<binasrh(0,1000000)<<endl;
        return 0; 
    }
  • 相关阅读:
    java中如何高效的判断数组中是否包含某个元素---
    反射--
    Json----
    Ajax学习(1)
    Jdbc学习---
    java---内部类
    java中的多态
    spring是什么
    quartz的配置文件
    浅谈Job&JobDetail
  • 原文地址:https://www.cnblogs.com/widsom/p/7569136.html
Copyright © 2020-2023  润新知