B. Born This Way 思維

傳送

題意:給你n趟A到B的航班 以及航班到達時間爲ta 和 m趟B到C的航班 以及到達時間爲tb 你最後可以取消k趟航班 儘量使得別人最晚到達C 如果不能到達C 輸出-1

思路:二分 將到達B點的所有時間 以及 B的出發時間 進行排序 ( 因爲到達B的時間越晚越好 )然後枚舉取消A到B的數量 然後二分找到B中小於等於a[i+1]的位置  如果剩下的航班數小於 k-i 則輸出-1 否則 維護一個最大值

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int MAXN=2e5+10;
ll a[MAXN];
ll b[MAXN];
int main()
{
    ll n,m,ta,tb,k;
    cin>>n>>m>>ta>>tb>>k;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
        a[i]+=ta;
    }
    for(int i=1;i<=m;i++)
    {
        cin>>b[i];
    }
    ll t;
    t=min(n,m);
    if(t<=k)
    {
        cout<<-1<<endl;
        return 0;
    }
    ll ans=0;
    for(int i=0;i<=k;i++)
    {
        int flag=i+1;
        int tt=lower_bound(b+1,b+1+m,a[flag])-b;
        if(k-i>=m-tt+1)
        {
            cout<<"-1"<<endl;
            return 0;
        }

        ans=max(ans,b[tt+k-i]+tb);
    }
    cout<<ans<<endl;
    return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章