【JZOJ2017.08.14C组T2】羊羊吃草(贪心)

题目描述

小羊们上完课后,纷纷到草场上吃草。而羊村现在正在进行特色示范羊村检查,领导们想看看羊村的草场。

羊村的草场是连续分布的,每块草场上都有数量不等的羊在吃草。领导们想要查看连续若干个草场,但是又不想看到超过T只羊。而村长希望领导们多看看羊村的风貌,尽可能多参观几个草场。

现在,请你帮村长决定,带领导们去参观哪一段草场,满足领导和村长的要求。

输入

第一行一个整数N和T,表示羊村共有多少个连续草场,以及领导们希望看到羊数量的最大值。

第二行N个整数,两个整数间用一个空格分开,第i个数ai表示第i个草场上有ai只羊在吃草。编号从1到N。

输出

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

用sum记录从tail到i的和,逐个加a[i],再加tail缩短到sum<t,记录i与tail的最大差。时间复杂度为O(n^2),但常数小,运行时间相当于O(2n)。

 1 #include<cstdio>
 2 long t,a[100001],sum;
 3 int n,p,x,y,i;
 4 int main(void){
 5     scanf("%d%ld",&n,&t);
 6     for(i=1;i<=n;++i) {
 7         scanf("%d",&a[i]);
 8         sum+=a[i];
 9         while(s>t)sum-=a[++p];
10         if(i-p>y-x)x=p,y=i;
11     }
12     printf("%d %d",x+1,y);
13 }

 

posted @ 2018-07-26 13:15  gzh01  阅读(396)  评论(0编辑  收藏  举报