Pagini recente » Cod sursa (job #2116573) | Cod sursa (job #3135498) | Cod sursa (job #609665) | Cod sursa (job #2515341) | Cod sursa (job #1507023)
//#include<iostream>
#include<fstream>
#include<deque>
#include<stdlib.h>
using namespace std;
ifstream f("k1.in");
ofstream g("k1.out");
int compare (const void * a, const void * b)
{
return ( *(short*)a - *(short*)b );
}
void max_heapify(short *a, int i, int n)
{
int j, temp;
temp = a[i];
j = 2*i;
while (j <= n)
{
if (j < n && a[j+1] > a[j])
j = j+1;
if (temp > a[j])
break;
else if (temp <= a[j])
{
a[j/2] = a[j];
j = 2*j;
}
}
a[j/2] = temp;
return;
}
void heapsort(short *a, int n)
{
int i, temp;
for (i = n; i >= 2; i--)
{
temp = a[i];
a[i] = a[1];
a[1] = temp;
max_heapify(a, 1, i - 1);
}
}
void build_maxheap(short *a, int n)
{
int i;
for(i = n/2; i >= 1; i--)
{
max_heapify(a, i, n);
}
}
int main()
{
int i,n,sum,k=0;
short s[1000001];
bool sem=0;
deque<int> v;
f>>n;
for(i=1;i<=n;i++)
f>>s[i];
build_maxheap(s,n);
heapsort(s, n);
// qsort (s, n, sizeof(short), compare);
for(i=0;i<n;i++)
s[i]=s[i+1];
v.push_back(s[0]);
v.push_back(s[1]);
//for(i=0;i<n;i++)
// cout<<s[i]<<" ";
i=2;
sum=v[0]+v[1];
k+=sum;
while(i<n)
{
if(sum>s[i])
{
v.push_back(s[i]);
i++;
}
else
{
sem=1;
v.push_back(sum);
if(v.size()<=3)
{
/*if(v.size()<2)
{
}
v.pop_front();
sum=v[0]+s[i];
i++;
k+=sum;*/
// else
//{
v.pop_front();
v.pop_front();
v.push_back(s[i]);
i++;
sum=v[0]+v[1];
k+=sum;
//}
}
else
{
v.pop_front();
v.pop_front();
sum=v[0]+v[1];
k+=sum;
}
}
}
while(v.size()>1)
{
v.push_back(sum);
v.pop_front();
v.pop_front();
if(v.size()>1)
{
sum=v[0]+v[1];
k+=sum;
}
}
if(v.size()==0)
k-=sum;
g<<k;
f.close();
g.close();
return 0;
}