母鸡下蛋

来源:互联网 发布:女孩子追男孩子知乎 编辑:程序博客网 时间:2024/03/29 18:28

母鸡下蛋

题目描述

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

输入

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

输出

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

样例输入

5 4
1 2 1 2 3

样例输出

2
AC代码如下:
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;long long n,t,sum=0,num[50005];int main(){int ans,start,end,i;scanf("%lld %lld",&n,&t);for(i=1;i<=n;i++){scanf("%lld",&num[i]);sum+=num[i];}if(sum < t){printf("Angry\n");return 0;}sum=0;start=1;end=1;while(sum < t){        //找出容量和大于等于鸡蛋数的位置 ,此时,summ>=m sum+=num[end];end++;}ans=end-start;while(sum >= t){sum-=num[start];start++;while(sum<t){sum+=num[end];end++;if(end == n+2)   //当加完最后一个num时,此时end=n+1,继续运行,当sum又小于零时, //但是num后面的值都是零了,已经没法再让sum增大,此时,end=n+2,break即可。 break;}ans=min(ans,end-start);}printf("%d\n",ans);return 0;}

 
原创粉丝点击