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追加了内容
我会了
