• CF1117C Magic Ship(二分)


    对于自己控制和风向两种情况,我们可以发现,其实这两个是不冲突的

    也就是对于风向我们是必须走的,而对于自己控制的肯定是朝最理想的状态

    因此我们可以先把风向的贡献做出来,来二分天数,看看能否控制曼哈顿距离小于等于天数。

    单调性的证明是,如果不可以满足条件,那么更小的天数也一定无法满足条件,因为我是最有利操作

    假设我在之前某天存在答案,那么在之后,我一定可以至少抵消到负面影响。那么推到今天也是可以,但是今天不行,因此更小的天数也不行

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int N=1e5+10;
    int dx[N],dy[N];
    ll x1,y1,x2,y2;
    int n;
    bool check(ll mid){
        ll d=mid/n;
        ll last=mid%n;
        ll tmp=x1+d*dx[n]+dx[last];
        ll tmp2=y1+d*dy[n]+dy[last];
        if(abs(x2-tmp)+abs(y2-tmp2)<=mid)
            return true;
        else
            return false;
    }
    int main(){
        cin>>x1>>y1>>x2>>y2;
        string s;
        cin>>n;
        cin>>s;
        s=" "+s;
        int i;
        for(i=1;i<s.size();i++){
            dx[i]=dx[i-1];
            dy[i]=dy[i-1];
            if(s[i]=='D')
                dy[i]=dy[i]-1;
            else if(s[i]=='U'){
                 dy[i]=dy[i]+1;
            }
    
            else if(s[i]=='L')
                dx[i]=dx[i]-1;
            else{
                dx[i]=dx[i]+1;
            }
        }
        ll r=1e18;
        ll l=1;
        int sign=0;
        while(l<r){
            ll mid=l+r>>1;
            if(check(mid)){
                r=mid;
                sign=1;
            }
            else
                l=mid+1;
        }
        if(!sign){
            cout<<-1<<endl;
        }
        else{
            cout<<l<<endl;
        }
    }
    View Code
  • 相关阅读:
    HDU4825/5536 [01 字典树/简单字典树更新]
    HDU 2017 多校联合Contest 3
    51nod 多重背包 [二进制优化]
    UVa 123042D Geometry 110 in 1! [平面几何]
    UVA 11796Dog Distance[平面几何]
    洛谷P1004 方格取数[多维dp]
    HDU 1576 A/B [逆元]
    POJ1006 中国剩余定理
    HDU 1573~3579 X问题&Hello Kiki[同余方程]
    一元线性同余方程组
  • 原文地址:https://www.cnblogs.com/ctyakwf/p/13468581.html
Copyright © 2020-2023  润新知