#include <bits/stdc++.h>
#define int long long
using namespace std;
int n, a;
priority_queue <int, vector <int>, greater <int> > q;
struct Number
{
int c[20005], l;
Number (){l = 0, memset (c, 0, sizeof (c));}
Number operator * (Number a)
{
Number s;
for (int i = 1; i <= l; ++ i)for (int j = 1; j <= a.l; ++ j)s.c[i + j - 1] += c[i] * a.c[j];
for (int i = 1; i < l + a.l; ++ i)if (s.c[i] > 9)
{
s.c[i + 1] += s.c[i] / 10;
s.c[i] %= 10;
}
s.l = l + a.l;
while (s.c[s.l] == 0 && s.l > 1)-- s.l;
return s;
}
Number operator + (Number a)
{
Number s;
for (int i = 1; i <= max (l, a.l); ++ i)
{
s.c[i] += a.c[i] + c[i];
if (s.c[i] > 9)
{
++ s.c[i + 1];
s.c[i] %= 10;
}
}
s.l = max (l, a.l);
if (s.c[s.l + 1])++ s.l;
return s;
}
};
Number change (int a)
{
int n = 0;
Number s;
while (a)
{
s.c[++ n] = a % 10;
a /= 10;
}
s.l = n;
return s;
}
void write (Number a)
{
for (int i = a.l; i >= 1; -- i)cout << a.c[i];
}
Number ans;
signed main ()
{
ios::sync_with_stdio (0), cin.tie (0), cout.tie (0);
cin >> n;
for (int i = 0; i < n; ++ i)
{
cin >> a;
q.push (a);
}
while (q.size () > 1)
{
int a, b;
a = q.top ();
q.pop ();
b = q.top ();
q.pop ();
q.push (a + b);
Number c = change (a), d = change (b), sum;
sum = c * d;
ans = ans + sum;
}
write (ans);
return 0;
}
重载高精最坏情况下时间复杂度会是多少呢?