样例输入:
7 3
30
17
26
41
19
38
18
样例输出:5
我的输出:148
我的程序:
#include <bits/stdc++.h>
using namespace std;
int n,k,a[100001],r[100001],t[100001],m,x,y,z;
long long s;
void msorta(int f,int l)
{
if (f==l) return;
m=(f+l)/2;
msorta(f,m);
msorta(m+1,l);
x=f;
y=m+1;
z=f;
while (x<=m && y<=l)
{
if (a[x]<=a[y])
{
t[z]=a[x];
x++;
z++;
}
else
{
t[z]=a[y];
y++;
z++;
}
}
while (x<=m)
{
t[z]=a[x];
x++;
z++;
}
while (y<=l)
{
t[z]=a[y];
y++;
z++;
}
for (int i=f;i<=l;i++)
{
a[i]=t[i];
}
}
void msortr(int f,int l)
{
if (f==l) return;
m=(f+l)/2;
msortr(f,m);
msortr(m+1,l);
x=f;
y=m+1;
z=f;
while (x<=m && y<=l)
{
if (r[x]<=r[y])
{
t[z]=r[x];
x++;
z++;
}
else
{
t[z]=r[y];
y++;
z++;
}
}
while (x<=m)
{
t[z]=r[x];
x++;
z++;
}
while (y<=l)
{
t[z]=r[y];
y++;
z++;
}
for (int i=f;i<=l;i++)
{
r[i]=t[i];
}
}
int main()
{
scanf("%d%d",&n,&k);
for (int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
msorta(1,n);
for (int i=1;i<n;i++)
{
r[i]=a[i]+a[i+1];
}
msortr(1,n-1);
for (int i=1;i<=k;i++)
{
s+=r[i];
}
printf("%lld",s);
return 0;
}