首页 > 其他 > 详细

2021.2.17 Rating 补题

时间:2021-02-26 14:19:52      阅读:30      评论:0      收藏:0      [点我收藏+]

D题,是求最远能飞到哪里,肯定是从某一个气流的起点开始飞飞的最远,我们就可以枚举每一个气流,看最远能飞到哪里,然后取最大值,怎么判断最远飞到哪里就可以通过先求出前缀和,在看某一段+h可以走过多少间隙就可以了,当时写前缀和的时候把自己写迷糊了,这是别人的代码:

技术分享图片
#include<bits/stdc++.h>
 
using namespace std;
const int MAX = 2e5 + 5;
int n,h;
int b[MAX],c[MAX];
struct Node {
    int l,r;
} node[MAX];
int main()
{
    cin>>n>>h;
    for(int i = 1; i<=n; i++) scanf("%d%d",&node[i].l,&node[i].r);
    c[1] = 0;b[1] = node[1].r-node[1].l;
    for(int i = 2; i<=n; i++) {
        b[i] = node[i].r - node[i].l;
        c[i] = node[i].l - node[i-1].r;
        b[i] += b[i-1];
        c[i] += c[i-1];
    }
    c[n+1] = INT_MAX;
    int maxx = -1,ans;
    for(int i = 1; i<=n; i++) {
        int pos = lower_bound(c+1,c+n+1,c[i]+h) - c;
        ans = b[pos-1] - b[i-1];
        maxx = max(maxx,ans);
    }
    printf("%d\n",maxx+h);
    return 0 ;
}
View Code

 

2021.2.17 Rating 补题

原文:https://www.cnblogs.com/Kingstar1/p/14451591.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!