題目鏈接
題意分析
考試的時候從這道題開始就一直在死
我們從0到k枚舉第一批航班取消多少個 根據貪心取消的肯定都是最靠前的航班
同時維護一個指針用於維護第一批航班中沒有取消的最早到達的第二批航班中的時間
看看從ta開始取消之後還能否到達第二批航班 不能的話就輸出-1 能的話就就將其同當前維護的答案比較
同時要注意的是 如果k≥n或者k≥m的話 肯定是到達不了的
CODE:
#include<bits/stdc++.h>
#define N 200080
using namespace std;
int n,m,ta,tb,k;
int ans;
int num1[N],num2[N];
int main()
{
scanf("%d%d%d%d%d",&n,&m,&ta,&tb,&k);
for(int i=1;i<=n;++i) scanf("%d",&num1[i]);
for(int i=1;i<=m;++i) scanf("%d",&num2[i]);
if(k>=n||k>=m)
{
puts("-1");
return 0;
}
for(int i=0,now=0;i<=k;++i)
{
while(num1[i+1]+ta>num2[now]&&now<=m) ++now;
if(now+k-i>m)
{
ans=-1;break;
}
ans=max(ans,num2[now+k-i]+tb);
}
printf("%d\n",ans);
return 0;
}