Codeforces Global Round 3 B. Born This Way

Posted winfor

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces Global Round 3 B. Born This Way相关的知识,希望对你有一定的参考价值。

题意:给两段航班的起始时间a ,b   这两段航班的飞行时间分别为ta,tb  给k次删除航班的次数, 问如何让飞从A飞到B 再从B起飞到目的地的时间最久

题目链接:https://codeforc.es/contest/1148/problem/B

刚开始想的是贪心选怎么删除航班,但是贪心的话是受k影响的 所以贪心是不对的

思路: 枚举a中要删除多少个航班,在对应到b中还有多少次剩余的删除次数用来继续删除一段连续的航班

因为是单增 可以用二分查找

技术图片
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 #define ll long long
 4 #define pb push_back
 5 const int maxn =2e5+10;
 6 int a[maxn];
 7 int b[maxn];
 8 
 9 int main()
10 {
11     ios::sync_with_stdio(false);
12     cin.tie(0);
13     int n,m,ta,tb,k;
14     cin>>n>>m>>ta>>tb>>k;
15     for(int i=1;i<=n;i++)
16     {
17         cin>>a[i];
18         a[i]+=ta;
19     }
20     for(int i=1;i<=m;i++)
21     {
22         cin>>b[i];
23     }
24     int ans=0;
25     for(int i=0;i<=k;i++) //a删去多少个
26     {
27         if(i>=n)
28         {
29             cout<<-1<<
;
30             return 0;
31         }
32         int x=lower_bound(b+1,b+1+m,a[i+1])-b;
33         if(x+k-i>m)
34         {
35             cout<<-1<<
;
36             return 0;
37         }
38         ans=max(ans,b[x+k-i]+tb);
39     }
40     cout<<ans<<
;
41 
42 
43 
44 }
View Code

 

以上是关于Codeforces Global Round 3 B. Born This Way的主要内容,如果未能解决你的问题,请参考以下文章

Codeforces Global Round #12

Codeforces Global Round 7

Codeforces Global Round 6

Codeforces Global Round 3 B. Born This Way

Codeforces Global Round 3:B. Born This Way

Codeforces Global Round 19