题目链接
题意分析
考试的时候从这道题开始就一直在死
我们从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;
}