Cod sursa(job #1214665)

Utilizator CostanMiriamCostan Miriam CostanMiriam Data 31 iulie 2014 00:58:17
Problema Coduri Huffman Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.2 kb
#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;
}