(纪中)2223. 母鸡下蛋(hen)

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


题目描述
鸡国中的母鸡最擅长下蛋了, M G M G MGMG 是鸡国中一只以下蛋产量高而闻名全鸡国的母鸡。
鸡国专供下蛋的 n n 个鸡窝呈一字排列在鸡国的“下蛋中心”,从左到右依次编号为 1 1 n n 。每个鸡窝都有一个最大可下蛋的量,其中第 i i 个鸡窝的最大可下蛋量为 c i ci 。有时候由于 M G M G MGMG 产量实在太大而无法在一个鸡窝中下完所有的蛋,不得不转移到隔壁的鸡窝继续下蛋,如果隔壁的鸡窝还是不能让它下完所有的蛋,则 M G M G MGMG 继续转移,直到下完所有的蛋,或者向“下蛋中心”管理员投诉“鸡窝数量实在太少了,我一只鸡的下蛋量都装不下!”。
为了节省转移时所耗费的体力,请你编程帮助 M G M G MGMG 找若干个连续的鸡窝(个数尽量少),让它能下完所有的蛋。


输入
输入共 2 2 行。
1 1 行输入两个整数 n n t t ,表示“下蛋中心”有 n n 个可供下蛋的鸡窝, M G M G MGMG 一次总共要下 t t 个鸡蛋。
2 2 n n 个正整数 c i ( 1 i n ) ci(1≤i≤n) ,依次表示第 i i 个鸡窝最大可下蛋量为 c i ci 个。

输出
输出 1 1 行一个整数或一个单词。当输出整数时表示让 M G M G MGMG 下完所有的蛋至少需要几个连续的鸡窝。当 M G M G MGMG 用完所有的鸡窝都无法下完所有的蛋时, M G M G MGMG 表示非常愤怒,输出单词 A n g r y “Angry” (不包含双引号,注意大小写)。


样例输入
Input1:
5 4
1 2 1 2 3

Input2:
3 9
3 3 3

Input3:
3 5
1 2 1

样例输出
Output1:
2

Outupt2:
3

Output3:
Angry


数据范围限制
在这里插入图片描述


提示
Sample1:
样例 1 1 中,有 5 5 个鸡窝,可下蛋量分别为 1 2 1 2 3 1,2,1,2,3 M G M G MGMG 如果选择第 1 2 3 1,2,3 号鸡窝能下完 4 4 个蛋,但要用 3 3 个鸡窝,而选择第 4 4 号和第 5 5 号鸡窝也能下完 4 4 个蛋(还有 1 1 个多余的容量),用到的鸡窝只有 2 2 个。
注意:由于第 2 2 号和第 4 4 号鸡窝不连续,不可以作为选择的方案之一。

Sample2:
样例 2 2 中,有 3 3 个鸡窝,可下蛋量分别为 3 3 3 3,3,3 M G M G MGMG 可以在这 3 3 个连续的鸡窝中每个下 3 3 个蛋,这样正好总共下 9 9 个蛋。

Sample3:
样例 3 3 中,所有鸡窝的可下蛋总量小于 M G M G MGMG 的下蛋量,无法满足 M G M G MGMG 的下蛋需求,输出 A n g r y “Angry”


解题思路
纯粹的前缀和。 n 2 + b r e a k n^2+break 优化防超时就行了。~~嗯嗯


代码

#include<iostream>
#include<cstring>
#include<string>
#include<cstdio>
#include<algorithm>
#include<iomanip>
#include<cmath>
using namespace std;
int n,t,ans,c[1000010],s;
int main(){
    freopen("hen.in","r",stdin);
    freopen("hen.out","w",stdout);
    scanf("%d%d",&n,&t);
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&c[i]);
        if(c[i]>t)
        {
            printf("1");
            return 0;
        }
        c[i]+=c[i-1];
    }
    if(c[n]<t)
    {
        printf("Angry");
        return 0;
    }
    ans=2147483647;
    for(int i=1;i<n;i++)
    {
        for(int j=i+1;j<=n;j++)
        {
            s=c[j]-c[i-1];
            if(s>=t)
            {
                if(j-i+1<ans)
                    ans=j-i+1;
                break;
            }
        }
    }
    printf("%d",ans);
}
发布了119 篇原创文章 · 获赞 8 · 访问量 4903

猜你喜欢

转载自blog.csdn.net/kejin2019/article/details/105125790