Codeforces 461A Appleman and Toastman
思路:需要让大值多加,所以每次拆出最小的值
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<limits.h> #include<ctype.h> #include<math.h> #include<string> #include<iostream> #include<algorithm> using namespace std; #include<queue> #include<stack> #include<vector> #include<deque> #include<set> #include<map> const int INF = 0x3f3f3f3f; __int64 s[400000]; int main() { int n; while(scanf("%d",&n)!=EOF) { __int64 sum=0,big=0; for(int i=0;i<n;i++) { scanf("%I64d",&s[i]); big+=s[i]; } sort(s,s+n); sum+=big; for(int i=0;i<n-1;i++) { sum+=big; big-=s[i]; } printf("%I64d\n",sum); } }