1929. 懒惰的奶牛[b](lazy_bronze)

在夏日的田野上,一只名叫贝里斯的懒惰奶牛想要找到最佳位置,以便在不超过K的距离内吃到最多的青草。面对N块直线排列的草坪,每块草坪有特定的青草数量和位置,如何利用前缀和算法帮助贝里斯计算最大青草收获量成为了解决的关键。

1929. 懒惰的奶牛[b](lazy_bronze)

题目描述
夏天又到了,奶牛贝里斯开始变得非常懒惰。他想要站在一个地方,然后只走很少的一段路,就能吃到尽可能多的美味的青草。有N块草坪排列在一条直线上,第i个草坪拥有g_i数量的青草,第i个草坪所在的位置是x_i。奶牛贝里斯想要在直线上选择一个点作为他的初始点(初始点有可能和草坪的位置重合),这样他就能吃到以这个点为中点距离不超过K的位置上的所有青草。如果初始点可以自由选择的话,请帮助贝里斯计算他最多能吃到的青草的数量。

输入
第一行是两个正整数,表示N和K。
第2行到第N+1行,每行两个整数,第i行的两个整数表示第i个草坪的g_i和x_i。

输出
输出贝里斯最多能吃到的青草数量。

样例输入

4 3 
4 7 
10 15 
2 2 
5 1

样例输出

 11

数据范围限制
1<=N<=100000,1<=g_i<=10000,0<=x_i<=1000000,1<=k<=2000000。

提示
如果贝里斯将初始点选择在x=4的位置,那么他可以吃到x=1,x=2和x=7这三个地方的青草,总共是11。

思路:
这道题就是求一个最大的区间和,那么我们就会想到前缀和。那如何去枚举每一个区间,其实就是去枚举每一个区间的右边界。

#include<cstdio>
#include<iostream>
#include<cmath>
#include<cstring>
#include<string>
#include<algorithm>
#include<vector>
#include<queue>
#define fre(x) freopen(#x".in","r",stdin),freopen(#x".out","w",stdout);
using namespace std;
const int MAX=2147483647;
const int N=5e6+5;
long long n,k,g,x,t[N],ans=-1;
int main()
{
	fre(lazy_bronze);
	scanf("%lld%lld",&n,&k);
	for(long long i=1;i<=n;i++) 
	scanf("%lld%lld",&g,&x),t[x]=g;
	for(long long i=1;i<=N;i++) t[i]+=t[i-1];
	for(long long i=N;i>=2*k;i--) 
	{
		
		if(i==2*k) ans=max(ans,t[i]);
			else ans=max(ans,t[i]-t[i-2*k-1]);
	}	
	printf("%lld",ans);
	return 0;
}
An exception was thrown while activating VOL.System.Repositories.Sys_File_InfoRepository -> VOL.System.Repositories.Sys_File_InfoRepository.Autofac.Core.DependencyResolutionException: Circular component dependency detected: VOL.System.Repositories.Sys_File_InfoRepository -> VOL.System.Repositories.Sys_File_InfoRepository -> VOL.System.Repositories.Sys_File_InfoRepository. at Autofac.Core.Resolving.Middleware.CircularDependencyDetectorMiddleware.Execute(ResolveRequestContext context, Action`1 next) at Autofac.Core.Resolving.Pipeline.ResolvePipelineBuilder.<>c__DisplayClass14_0.<BuildPipeline>b__1(ResolveRequestContext context) at Autofac.Core.Resolving.Pipeline.ResolvePipelineBuilder.<>c__DisplayClass14_0.<BuildPipeline>b__1(ResolveRequestContext context) at Autofac.Core.Resolving.ResolveOperation.GetOrCreateInstance(ISharingLifetimeScope currentOperationScope, ResolveRequest& request) at Autofac.Core.Activators.Reflection.BoundConstructor.Instantiate() at Autofac.Core.Activators.Reflection.ReflectionActivator.<>c__DisplayClass14_0.<UseSingleConstructorActivation>b__0(ResolveRequestContext context, Action`1 next) at Autofac.Core.Resolving.Pipeline.ResolvePipelineBuilder.<>c__DisplayClass14_0.<BuildPipeline>b__1(ResolveRequestContext context) at Autofac.Core.Resolving.Middleware.DisposalTrackingMiddleware.Execute(ResolveRequestContext context, Action`1 next) at Autofac.Core.Resolving.Pipeline.ResolvePipelineBuilder.<>c__DisplayClass14_0.<BuildPipeline>b__1(ResolveRequestContext context) at Autofac.Core.Resolving.Middleware.ActivatorErrorHandlingMiddleware.Execute(ResolveRequestContext context, Action`1 next)这也出这样的问题
最新发布
08-21
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值