jzoj2182羊羊吃草

Posted SSL_ZZL

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jzoj2182羊羊吃草相关的知识,希望对你有一定的参考价值。

题目描述

小羊们上完课后,纷纷到草场上吃草。而羊村现在正在进行特色示范羊村检查,领导们想看看羊村的草场。
羊村的草场是连续分布的,每块草场上都有数量不等的羊在吃草。领导们想要查看连续若干个草场,但是又不想看到超过T只羊。而村长希望领导们多看看羊村的风貌,尽可能多参观几个草场。
现在,请你帮村长决定,带领导们去参观哪一段草场,满足领导和村长的要求。

输入
第一行一个整数N和T,表示羊村共有多少个连续草场,以及领导们希望看到羊数量的最大值。
第二行N个整数,两个整数间用一个空格分开,第i个数ai表示第i个草场上有ai只羊在吃草。编号从1到N。

输出
输出一行,共两个数,表示参观的起点编号和终点编号,中间用空格分开。走的方向总是从编号小的到编号大的。另外,若有长度相同的可能性,输出起点编号较小的答案。数据保证至少有答案存在。

样例输入

5 10
6 3 2 1 7

样例输出

2 4

数据范围限制
30%的数据,1<=N<=100;
60%的数据,1<=N<=1000;
100%的数据,1<=N<=100000, 0<=ai<=109, 0<=T<=231-1

提示
要满足连续个总和不超过10,有3+2+1和2+1+7两种可能性,优先输出2到4个草场。


解题思路

枚举草场,保证当前的草场可以参观


#include<iostream>
#include<cstdio>
using namespace std;
long long n,m,j,x,y,sum,a[100100];
int main()
	freopen("eat.in","r",stdin);
	freopen("eat.out","w",stdout);
	scanf("%lld%lld",&n,&m);
	int j=1;
	for(int i=1;i<=n;i++)
		scanf("%lld",&a[i]);
		sum+=a[i];
		while(sum>m)//保证当前草场可以参观
			sum-=a[j++];
		if(i-j+1>y-x+1)
			x=j,y=i;
	
	printf("%lld %lld",x,y);
 

以上是关于jzoj2182羊羊吃草的主要内容,如果未能解决你的问题,请参考以下文章

Jzoj 4889NOIP2016提高A组集训第14场11.12暴力贪心最长公共回文子序列

已知有n个羊村村民正在排队取水,懒羊羊不知道他在队伍的具体哪个位置,但他知道有不少于a个人在他前面,有不多于b个人在他后面,你能帮忙计算一下懒羊羊有多少个可能的位置吗?

题解 P4277 河城荷取的烟花

Jzoj 3055NOIP2012模拟10.27期望比赛

P1395 会议(求树的重心)

P1395 会议(树的重心)