Cod sursa(job #848192)

Utilizator varga13VarGaz13 varga13 Data 4 ianuarie 2013 23:14:14
Problema Avioane Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.37 kb
#include <fstream>
#include <algorithm>
#define max 100005

using namespace std;

long n=0,v[max],pro[max],c=0,d=0,PT;

void Read();
void Print();
void Solve();
void Construct();
void GetPrices();
void Profit();
bool Comp(long a,long b);




int main()
{Read();
Solve();
Print();
return 0;
}


bool Comp(long a,long b)
{
    return (a<b);
}

void Read()
{
    ifstream f("avioane.in");

    f>>n;

    for(int i=1;i<=n;i++)
        f>>v[i];

    f.close();
}

void Print()
{
    ofstream g("avioane.out");

    g<<PT;

    g.close();
}

void Solve()
{
    sort(&v[1],&v[n+1],Comp);

    Construct();

    GetPrices();

    Profit();

}

void Construct()
{
    for(int i=1;i<=n;i++)
        pro[i]=v[i]*(n-i+1);
}

void GetPrices()
{int a,b;
    for(int nn=n;nn>=2;nn>>=1)
    {
        for(int i=1;i<=n;i++)
            {
                for(;pro[i]==-1;i++);
                a=i;
                i++;
                for(;pro[i]==-1;i++);
                b=i;



            if(pro[a]>pro[b])
                pro[b]=-1;
            else
                pro[a]=-1;


        }

    }

}

void Profit()
{
int q=0;
    for(int i=n;i>=1;i--)
        {

            if(pro[i]!=-1)
                {
                    PT+=v[i]*(n-q-i+1);
                    q=n-i+1;
                }
        }

}