题解 | 美
美
https://www.nowcoder.com/practice/456cb89facc64a4cb2f2ea809b8a64c5
采取贪心的思维将数组排完序之后按大小大小大小的方式放使相邻值最大即可
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define vi vector<int>
#define um unordered_map
#define us unordered_set
#define vl vector<ll>
int n;
void sol(){
cin >> n;
vl b(n,0);
for(int i=0;i<n;i++){
cin >> b[i];
}
sort(b.begin(),b.end());
ll ans=0;
vl a;
int l=0;
int r=n-1;
while(l<r){
a.push_back(b[r--]);
a.push_back(b[l++]);
}
if(l==r)a.push_back(b[l]);
for(int i=0;i<n;i++){
ans+=abs(a[i]-a[((i-1)+n)%n]);
}
cout << ans << endl;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int T=1;
//cin >> T;
while(T--)sol();
return 0;
}
查看16道真题和解析
