Pagini recente » Cod sursa (job #326798) | Cod sursa (job #1622539) | Cod sursa (job #1398951) | Cod sursa (job #2823416) | Cod sursa (job #1214665)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin ("k1.in");
ofstream fout ("k1.out");
int n,i,k,p1,p2;
long long sum;
long long v[(1000001)<<1];
bool verif1 () {
if (p1>=n)
return 0;
if (v[p1]+v[p1+1]>v[p1]+v[p2] && p2<=k)
return 0;
if (v[p1]+v[p1+1]>v[p2]+v[p2+1] && p2<k)
return 0;
return 1;
}
bool verif2() {
if (p1>n||p2>k)
return 0;
if (v[p1]+v[p2]>v[p1]+v[p1+1] && p1<n)
return 0;
if (v[p1]+v[p2]>v[p2]+v[p2+1] && p2<k)
return 0;
return 1;
}
int main () {
fin>>n;
for(i=1;i<=n;i++){
k++;
fin>>v[k];
}
sort (v+1,v+n+1);
v[++k]=v[1]+v[2];
sum+=v[k];
p1=3;
p2=k;
while (p2<k||p1<=n) {
if (verif1()) {
v[++k]=v[p1]+v[p1+1];
p1+=2;
sum+=v[k];
}else
if (verif2()) {
v[++k]=v[p1]+v[p2];
p1++;
p2++;
sum+=v[k];
}else {
v[++k]=v[p2]+v[p2+1];
p2+=2;
sum+=v[k];
}
}
fout<<sum<<"\n";
return 0;
}