[NOI Online #3 提高组]水壶

题目大意:

在一个长度为 (n) 的序列中求出长度为 ((k+1)) 的最大子段。

正文:

本题唯一的需要注意的一点是当 (k=n) 时要输出所有数的和,像我的考场代码:

	scanf("%d%d", &n, &k);
	k++;
	if(k > n) k = n;
	for (int i = 1; i <= n; i++)
		scanf("%d", &a[i]);
	for (int i = 1; i <= k; i++)
		op += a[i];
	for (int i = k + 1; i <= n; i++)
	{
		if(ans < op) ans = op;
		op += a[i] - a[i - k];
	}
	printf("%lld", ans);

要是 (nleq k) 就锅了。

正确代码:

	scanf("%d%d", &n, &k);	
	for (int i = 1; i <= n; i++)
		scanf("%d", &a[i]);
	for (int i = 1; i <= k + 1; i++)
		op += a[i];
	for (int i = min(k + 1, n); i <= n; i++)
	{
		if(ans < op) ans = op;
		op += a[i + 1] - a[i - k];
	}
	printf("%lld", ans);
原文地址:https://www.cnblogs.com/GJY-JURUO/p/12734833.html