列表

详情


NC221785. dd爱整齐

描述

认为一个整齐的无限序列应该满足如下条件
时 
   时 
   时 
有限序列为无限序列的任意连续子序列
以此类推,其中为正整数且
都可以认为是一个合法的有限序列
现在给你一个序列,它不一定是一个有限序列,所以你可以对序列进行修正
对于每次修正,你可以选择一个位置,把变成,问把该序列变成有限序列所需要的最小修正次数

输入描述

第一行两个正整数n,k(1≤k≤n≤1000000),
第二行n个正整数描述序列c,对于序列中第i(1≤i≤n)个数c[i],满足1≤c[i]≤1000000000

输出描述

一个数,表示最小修正次数

示例1

输入:

5 2
5 2 3 1 4

输出:

8

说明:

改成[1,2,1,1,2],最小修正次数为(5-1)+(2-2)+(3-1)+(1-1)+(4-2)=8

原站题解

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

C++ 解法, 执行用时: 505ms, 内存消耗: 8260K, 提交时间: 2021-07-30 22:21:01

#include <iostream>
using namespace std;
typedef long long ll;
ll n,k,a[1000005],sum=0,low=1e10,big=0;
int main()
{
	cin>>n>>k;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		sum+=a[i];
		low=min(low,a[i]);
	}
	for(int i=1;i<=k;i++){
		int c=0;
		ll low2=1e10;
		for(int j=i;j<=n;j+=k+1){
			low2=min(low2,a[j]);
			c++;
		}
		big=max(big,c*(low2-low));
	}
	cout<<sum-n*low-big;
    return 0;
}

上一题