::::error[50分评测信息]
半江瑟瑟 半江红(点我)
::::
::::error[50分代码 以及 思路]
:::info[思路]
大数尽可能往两端,小数跟在大一点的数后面
呃……好像就这
a---b---c---b---a
c与c之间的距离:0(这个只有一个)
b:2
a:4
然后就有了代码里的公式
a---b---b---a
b:1
a:3
于是又有了公式
:::
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a,b;
cin >> a >> b;//输入
int n[b];
for(int i = 0;i < b;i++)
{
cin >> n[i];//输入
}
sort(n,n + b);//排序
long long p = b,cnt = 0;//保险开longlong
if(a % 2 == 0)//偶数
{
for(int i = a / 2;i > 0;i--)//往中间看
{
if(p > 0)//还有小一点的数
{
p--;//那就-(刚才是小到大排序的,现在得反过来看)
}
cnt += n[p] *(i * 2 - 1);//间隔为i*2-1个
}
}
else//奇数
{
for(int i = a / 2;i > 0;i--)//奇数(默认向下取整)
{
if(p > 0)
{
p--;
}
cnt += n[p] * i * 2;//我把括号省略了
}
}
cout << cnt;//输出
return 1;//每日防抄1/1
}
:::: ::::info 据说前半部分是 n<k ::::