CF1148B Born This Way

题目链接

题意分析

考试的时候从这道题开始就一直在死

我们从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;
}
原文地址:https://www.cnblogs.com/tcswuzb/p/14385496.html