1922. 懒惰的牛
Posted 沧夜2021
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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, 1≤N≤105,
1 ≤ g i ≤ 10000 , 1≤g_i≤10000, 1≤gi≤10000,
0 ≤ x i ≤ 1 0 6 , 0≤x_i≤10^6, 0≤xi≤106,
1 ≤ K ≤ 2 × 1 0 6 1≤K≤2×10^6 1≤K≤2×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;
微信公众号:【沧夜的成长日记】欢迎关注呀~
以上是关于1922. 懒惰的牛的主要内容,如果未能解决你的问题,请参考以下文章