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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章