题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=2974
排个序,最小的和最大的配对,次小的和次大的配对,以此类推。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
#include<bits/stdc++.h> #define maxn 100010 #define inf INT_MAX/2 using namespace std; inline int rd(){ int x=0,y=1;char c=getchar(); while(!isdigit(c)){if(c=='-')y=-y;c=getchar();} while(isdigit(c))x=x*10+c-'0',c=getchar(); return x*y; } int n,ans; int a[maxn]; inline void init(){ n=rd(); for(int i=1; i<=n; i++){ a[i]=rd(); ans+=a[i]; } sort(a+1,a+n+1); } inline void work(){ for(int i=1; i<=n/2; i++)ans+=max(0,a[n-i+1]-a[i]); printf("%d\n",ans); } int main(){ init(); work(); return 0; } |