-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathAddAll.cpp
More file actions
50 lines (40 loc) · 1.47 KB
/
AddAll.cpp
File metadata and controls
50 lines (40 loc) · 1.47 KB
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
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <iostream>
#include <queue>
using namespace std;
int main(){
int N, x,cost = 0, sum;
//Vetor ordenado de inteiros
priority_queue<int, vector<int>, greater<int> >q;
//Inpirado em https://gist.github.com/KT-Yeh/9286314
//A principio tentei com um vetor. Após carrega-lo, ordenava ascendente e começaca o calculo de custo.
//Mas no meio dos calculos observei que os custos também precisavam ser ordenados, para entrar no calculo novamente.
//Ou seja, precisava de uma outra estrutura, e não um vetor, dai veio a fila de prioridade.
while (!cin.eof())
{
if(cin >> N){
if(N == 0)
return 0;
//Armazena ordenadamente
for (int n = 0; n < N; ++n)
{
cin >> x;
q.push(x);
}
sum = 0;
cost = 0;
//Calcula os custos e colocar o resultado na lista ordenada, para ser somado novamente
while (true)
{
cost = q.top();
q.pop();
cost += q.top();
q.pop();
sum += cost;
if(q.empty())
break;
q.push(cost);
}
cout << sum << endl;
}
}
}