列表

详情


NC212987. 数组的和

描述

在某次xju集训中,ljs给出了一个数组a,但是hyf觉得这个数组有点太大了,所以他想在数组中删掉一段连续长度为k的数字,使得数组中剩下得数字的和最小。

输入描述

第一行两个整数n,k。

第二行,有n个整数a_1,a_2,a_3,a_4...,a_n

1<=k<=n<=2e5
1<=a_i<=1e9

输出描述

删掉k个数字后,数组中剩下的数字和的最小值。

示例1

输入:

1 1
1

输出:

0

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++14(g++5.4) 解法, 执行用时: 3ms, 内存消耗: 380K, 提交时间: 2020-10-10 13:15:28

#include<bits/stdc++.h>
using namespace std;
int n,k,i,a[200002],s,t,m,j;
int p(int x,int y)
{
	return x>y;
} main()
{
	cin>>n>>k;
	for(;i<n;i++)cin>>a[i],s+=a[i];
	for(i=0;i<=n-k;i++)
	{
	    for(t=0,j=i;j<i+k;j++)
	    	t+=a[j];
		m=max(t,m);
	}cout<<s-m;
}

C++11(clang++ 3.9) 解法, 执行用时: 3ms, 内存消耗: 376K, 提交时间: 2020-10-10 15:48:18

#include<bits/stdc++.h>
using namespace std;
int a[200100];
int main()
{
	long long n,k,i,sum=0,h=0,ma=0;
	cin>>n>>k;
	for(i=1;i<=n;i++){
		cin>>a[i];
		sum+=a[i];
		h+=a[i];
		if(i>k)h-=a[i-k];
		ma=max(ma,h);
	}
	cout<<sum-ma;
	return 0;
}

Python3 解法, 执行用时: 53ms, 内存消耗: 4784K, 提交时间: 2022-12-14 19:39:21

n,k=map(int,input().split())
ls=list(map(int,input().split()))
num=[]
for i in range(n):
    num.append(sum(ls[:i])+sum(ls[i+k:]))
print(min(num))

上一题