松果
描述
大森林有熊兄弟的好朋友松鼠蹦蹦,一天蹦蹦来到一条很长的小路,发现沿路地上都有松果,高兴极了,决定尽可能多吃松果。
蹦蹦观察到,每个松果的重量并不一定相同,可蹦蹦的肚子容量有限,总共最多只能吃重量C的松果。
蹦蹦吃东西有个特点,一旦开吃就会不停的吃,不会漏过路上碰到松果,直到遇到一个吃不下或吃完停止。也就是说松鼠蹦蹦只会吃连续一段的松果。
已知路上共有N个松果,顺序的重量是w1,w2,….wn。蹦蹦最多可能吃多少颗松果?
输入
第一行,二个正整数,空格分开,表示N和C,N范围在[1..50000], C范围在[1..1000000]。
第二行,N个正整数,空格分开,表示从w1、w2,…wn,即松果的重量。每个松果重量范围在[1..1000]。
输出
一个正整数,蹦蹦可以吃到的最多松果数量。
输入样例 1
5 5
3 1 2 1 1
输出样例 1
4
//具体思路:两个下标,枚举一段,一个左边,一个右边,s装当前一段的质量,要哨兵,因为如果全吃完局部会更新长度,吃不下就和maxn比较,大更新,
好,不废话
上代码:
#include<iostream>
using namespace std;
long long n,m,a[50001],l,s,maxn,r;
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
a[n+1]=m+1;
while(1)
{
if(s+a[l+1]>m)
{
if(l-r>maxn)
{
maxn=l-r;
}
r++;
s=s-a[r];
}
else
{
l++;
s=s+a[l];
}
if(r==l)
{
break;
}
}
cout<<maxn;
return 0;
}
点个赞再走,靓仔靓女,(^-^)!
不点也行,但是我真的很想火,不火也行,毕竟我也是个小学生,但我还是很想火(ಥ_ಥ)