问题标题: 酷町堂:4091 酷町猫拔栅栏

0
0
已解决
汪恺恒
汪恺恒
中级启示者
中级启示者

题目描述 Description

酷町猫家前面有一道栅栏。围栏由n块宽度相同的木板组成,从左到右依次排列。第i块木板的高度为hi米,不同的木板可以有不同的高度。酷町猫现在要拔掉k块木板,以方便把他新买的沙发搬进家。他需要从栅栏上连续拿下K块木板。高的木板更难从栅栏上拆下来,所以酷町猫希望找到这样的K块连续木板,使得它们的高度之和是最小的。现在请你编写一个程序,计算连续拔的k块木板的最小高度和,输出最小高度情况下的开始木板序号。

输入描述 Input Description

第一行输入n和k,表示木板的个数以及需要拔木板的个数
第二行n个数,h1、h2、…、hn,分别表示第一块到第n块木板的高度

输出描述 Output Description

输出整数j,使木板高度j,j+1,…,j+k-1之和为最小值。如果有多个这样的J,打印其中第一个。

 

样例过了,WA0

#include<iostream>
#include<bits/stdc++.h> 
using namespace std;
int n,m,a[150005],f[150005],sum=0x3f3f3f3f,ans;
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		f[i]=f[i-1]+a[i];
	}
	for(int i=m;i<=n;i++){
		if(f[i]-f[m]<sum){
            ans=i;
            sum=f[i]-f[m];
        }
	}
	cout<<ans;
	return 0;
}

 

汪恺恒在2021-02-22 17:30:38追加了内容

我会了


0
已采纳
汪宇航
汪宇航
新手启示者
新手启示者

我也不知道,应该是滑动窗口,而且输出不应该是sum吗?

我要回答