(File IO): input:hen.in output:hen.out
时间限制: 1000 ms 空间限制: 262144 KB 具体限制
Goto ProblemSet
题目描述
鸡国中的母鸡最擅长下蛋了,
是鸡国中一只以下蛋产量高而闻名全鸡国的母鸡。
鸡国专供下蛋的
个鸡窝呈一字排列在鸡国的“下蛋中心”,从左到右依次编号为
到
。每个鸡窝都有一个最大可下蛋的量,其中第
个鸡窝的最大可下蛋量为
。有时候由于
产量实在太大而无法在一个鸡窝中下完所有的蛋,不得不转移到隔壁的鸡窝继续下蛋,如果隔壁的鸡窝还是不能让它下完所有的蛋,则
继续转移,直到下完所有的蛋,或者向“下蛋中心”管理员投诉“鸡窝数量实在太少了,我一只鸡的下蛋量都装不下!”。
为了节省转移时所耗费的体力,请你编程帮助
找若干个连续的鸡窝(个数尽量少),让它能下完所有的蛋。
输入
输入共
行。
第
行输入两个整数
和
,表示“下蛋中心”有
个可供下蛋的鸡窝,
一次总共要下
个鸡蛋。
第
行
个正整数
,依次表示第
个鸡窝最大可下蛋量为
个。
输出
输出
行一个整数或一个单词。当输出整数时表示让
下完所有的蛋至少需要几个连续的鸡窝。当
用完所有的鸡窝都无法下完所有的蛋时,
表示非常愤怒,输出单词
(不包含双引号,注意大小写)。
样例输入
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:
样例
中,有
个鸡窝,可下蛋量分别为
。
如果选择第
号鸡窝能下完
个蛋,但要用
个鸡窝,而选择第
号和第
号鸡窝也能下完
个蛋(还有
个多余的容量),用到的鸡窝只有
个。
注意:由于第
号和第
号鸡窝不连续,不可以作为选择的方案之一。
Sample2:
样例
中,有
个鸡窝,可下蛋量分别为
,
可以在这
个连续的鸡窝中每个下
个蛋,这样正好总共下
个蛋。
Sample3:
样例
中,所有鸡窝的可下蛋总量小于
的下蛋量,无法满足
的下蛋需求,输出
。
解题思路
纯粹的前缀和。
优化防超时就行了。~~嗯嗯
代码
#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);
}