1922. 懒惰的牛

1922. 懒惰的牛

前言

近期开始更新Acwing网站上的题目,力扣先不更新

题目

这是一个炎热的夏日。

懒洋洋的奶牛贝茜想将自己放置在田野中的某个位置,以便可以在短距离内尽可能多地吃到美味的草。

贝茜所在的田野中共有 N N N 片草地,我们可以将田野视作一个一维数轴。

i i i 片草地中包含 g i g_i gi 单位的青草,位置坐标为 x i x_i xi

不同草地的位置不同。

贝茜想选取田野中的某个点作为她的初始位置(可能是某片草地所在的点)。

只有一片草地与她的初始位置的距离不超过 K K K 时,贝茜才能吃到那片草地上的草。

如果贝茜选择最佳初始位置,请确定她可以吃到的青草最大数量。

输入格式

第一行包含两个整数 N N N K K K

接下来 N N N 行,每行描述一片草地,包含两个整数 g i g_i gi x i x_i xi

输出格式

输出如果贝茜选择最佳初始位置,则她可以吃到的青草最大数量。

数据范围

1 ≤ N ≤ 1 0 5 , 1≤N≤10^5, 1N105,

1 ≤ g i ≤ 10000 , 1≤g_i≤10000, 1gi10000,

0 ≤ x i ≤ 1 0 6 , 0≤x_i≤10^6, 0xi106,

1 ≤ K ≤ 2 × 1 0 6 1≤K≤2×10^6 1K2×106

输入样例:

4 3
4 7
10 15
2 2
5 1

输出样例:

11

样例解释

最佳初始位置选择为 x = 4 x=4 x=4,可以吃到
x = 1 , x = 2 , x = 7 x=1,x=2,x=7 x=1,x=2,x=7 处的青草。

思路

整体的思路就是求这个一维数组存在的一个区间

这个区间的长度是 2 K 2K 2K

使得这个区间中心上的牛可以吃到最多的草

这一题可以使用双指针滑动窗口来求解

为了方便,需要使用pair这个类型

由于pair每次定义比较麻烦,对其进行别名为PILL

类型的成员一个是first

另一个是second

命名起来也很麻烦,对其再别名为 x x x y y y

//对pair的两个成员进行别名
#define x first
#define y second
//对pair这个类型进行别名
typedef pair<int ,int > PILL;

题解

#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

//对pair的两个成员进行别名
#define x first
#define y second

//对pair这个类型进行别名
typedef pair<int ,int > PILL;
PILL P[100010];

int main()
{
    
    int n,m;
    int sum = 0;
    int ans = 0;
    //读入n和m
    cin>>n>>m;
    //将后续需要读入的数据存入pair为类型的数组中
    for(int i = 0;i<n;i++){
        cin>>P[i].y>>P[i].x;
    }
    //对pair排序,默认是对first升序
    sort(P,P+n);
    //开始双指针
    for(int i = 0,j = 0;i<n;i++)
    {
        sum+=P[i].y;
        while(P[i].x-P[j].x>2*m)  sum-=P[j++].y;
        ans = max(ans,sum);
    }
    printf("%d",ans);
    return 0;
}

微信公众号:【沧夜的成长日记】欢迎关注呀~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陈沧夜

打个赏,让我买瓶可乐喝呗~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值