本蒟蒻,脑子或许有坑,非得用 nlogn 过这道题。。。
于是,尽自己所能,写了一份常数很小很小的代码:
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <queue>
using namespace std;
typedef long long l;
priority_queue<l, vector<l>, greater<l>> q;
inline l read() {
register l x=0;char ch=getchar();
while(ch<'0'||ch>'9')ch=getchar();
while(ch>='0'&&ch<='9')x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
return x;
}
inline void print(register const l &x) {
if (x > 9) {
print(x / 10);
}
putchar(x % 10 + '0');
}
int main(){
register l n, sum = 0;
n = read();
for (l i = 1; i <= n; ++i){
register l x;
x = read();
q.push(x);
}
while (true) {
register l x = q.top();
q.pop();
if (q.empty()) break;
x += q.top();
q.pop();
sum += x;
q.push(x);
}
print(sum);
}
但是,还是 TLE 了。
悬关,在时间复杂度不变的情况下,把这份代码改成 AC 代码。