(纪中)2182. 羊羊吃草(eat)【前缀和】

(File IO): input:eat.in output:eat.out
时间限制: 1000 ms 空间限制: 131072 KB 具体限制
Goto ProblemSet


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


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

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


样例输入
5 10
6 3 2 1 7

样例输出
2 4


数据范围限制
30 30 30%的数据, 1 < = N < = 100 1<=N<=100 1<=N<=100;
60 60 60%的数据, 1 < = N < = 1000 1<=N<=1000 1<=N<=1000;
100 100 100%的数据, 1 < = N < = 100000 , 0 < = a i < = 1 0 9 , 0 < = T < = 2 3 1 − 1 1<=N<=100000, 0<=ai<=10^9,0<=T<=2^31-1 1<=N<=100000,0<=ai<=1090<=T<=2311


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


解题思路
先做一个前缀和,然后暴力,再加一点优化。。


代码

#include<iostream>
#include<cstring>
#include<string>
#include<cstdio>
#include<algorithm>
#include<iomanip>
#include<cmath>
using namespace std;
long long n,t,a[100010],maxn,p,q,i;
int main(){
   freopen("eat.in","r",stdin);
   freopen("eat.out","w",stdout);
    scanf("%d%lld",&n,&t);
    for(int i=1;i<=n;i++)
    {
        scanf("%lld",&a[i]);
        a[i]+=a[i-1];
    }
    i=0,maxn=0;
    while(i<n-maxn)
    {
        i++;
        for(int j=i+maxn;j<=n;j++)
        {
            if(a[j]-a[i-1]<=t)
            {
                maxn=max(maxn,j-i+1);
                p=i;
                q=j;
            }
            else
            break;
        }
    }
    printf("%d %d",p,q);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值