#C06L05P03. C06.L05.尺取法.填空题2,松果(DLOI2016xjt)

C06.L05.尺取法.填空题2,松果(DLOI2016xjt)

题目描述

大森林有熊兄弟的好朋友松鼠蹦蹦,一天蹦蹦来到一条很长的小 路,发现沿路地上都有松果,高兴极了,决定尽可能多吃松果。

蹦蹦观察到,每个松果的重量并不一定相同,可蹦蹦的肚子容量 有限,总共最多只能吃重量 C 的松果。
蹦蹦吃东西有个特点,一旦开吃就会不停的吃,不会漏过路上碰 到松果,直到遇到一个吃不下或吃完停止。也就是说松鼠蹦蹦只会吃 连续一段的松果。

已知路上共有 N 个松果,顺序的重量是 w1,w2,...,wnw_1, w_2,..., w_n 。蹦蹦最多可能吃多少颗松果?

输入格式

第一行,二个正整数,空格分开,表示 N 和 C,N 范围在[1..50000], C 范围在[1..1000000]。

第二行,N 个正整数,空格分开,表示从 w1w2,...,wnw_1、w_2,..., w_n ,即松果的重量。每个松果重 量范围在[1..1000]。

数据范围

一个正整数,蹦蹦可以吃到的最多松果数量。

输出格式

样例

5 5
3 1 2 1 1
4
9 5
1 5 4 3 2 1 1 4 1
3

样例解释

样例 1 :吃:(1,2,1,1)这段的松果。

样例 2 :吃:(2,1,1)这段的松果。

完成程序

#include<bits/stdc++.h>
using namespace std;
int n,c,a[50002],ma=0,s=0;
long long ans;
int main()
{
	cin>>n>>c;
	
	for(int i=1;i<=n;i++) cin>>a[i];
	
	for(int x=1,y=填空(1);y<=n;y++)
	{
		s += 填空(2); // x 到 y 的松果总重量
		填空(3) (s>c) s-= a[x++];  //移动 x 收缩区间
		ma=max(填空(4),ma);  //求最长区间长度 
	}

	cout<<ma;

	return 0;
}

填空(1):{{ input(1) }}

填空(2):{{ input(2) }}

填空(3):{{ input(3) }}

填空(4):{{ input(4) }}