Re: 10954 - Add All
Posted: Wed Apr 18, 2012 11:27 pm
Use a priority_queue.
I don't know what is this?brianfry713 wrote:Use a priority_queue.
Code: Select all
#include <iostream>
#include <algorithm>
#include <queue>
using namespace std;
int main(){
int n;
cin >> n;
while (!n == 0){
priority_queue<int> a;
int b;
int cost = 0;
int sum = 0;
if (n == 2){
int c;
cin >> b >> c;
cout << b + c;
}
else{
for (int i = 1; i <= n; i++){
cin >> b;
a.push(b);
}
for (int i = 3; i<= n; i++){
sum += cost;
cost += a.top();
a.pop();
}
sum += cost;
cout << sum << endl;
}
cin >> n;
}
}
Code: Select all
#include <iostream>
#include <algorithm>
#include <queue>
using namespace std;
int main(){
int n;
cin >> n;
while (!n == 0){
priority_queue<int> a;
int b;
int cost = 0;
int sum = 0;
if (n == 2){
int c;
cin >> b >> c;
cout << b + c;
}
else{
for (int i = 1; i <= n; i++){
cin >> b;
a.push(b);
}
while (a.size() > 1){
b = a.top();
a.pop();
a.push(a.top() + b);
a.pop();
}
cout << a.top() << endl;
}
cin >> n;
}
}
Code: Select all
removed after AC
Code: Select all
#include <stdio.h>
#include <string.h>
void sort(long long int array[], long long int length)
{
long long int i,j,count,pos,min[10000][2];
for(i=0;i<length;i++) {
min[i][1]=0;
}
for(i=0;i<length;i++) {
count=0;
for(j=0;j<length;j++) {
if(array[i]<array[j]) count++;
}
pos=++min[count][1];
min[count+pos-1][0]=array[i];
}
for(i=0;i<length;i++) array[i]=min[i][0];
}
int main()
{
long long int num[10000],N,i,j,k,l,sum,temp;
while(scanf("%lld",&N)==1 && N) {
i=0;
for(i=0;i<N;i++) scanf("%lld",&num[i]);
sort(num,N);
sum=0,temp=0;
if(N==1) printf("%lld\n",num[0]);
else {
for(i=N-1;i-1>=0;i--) {
temp=num[i-1]+num[i];
sum+=temp;
num[i-1]=temp;
num[i]=0;
sort(num,N);
}
printf("%lld\n",sum);
}
memset(num,0,sizeof(num));
}
return 0;
}