Cod sursa(job #1527442)

Utilizator Eugen_VlasieFMI Vlasie Eugen Eugen_Vlasie Data 18 noiembrie 2015 05:07:32
Problema Statistici de ordine Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.19 kb
#include <fstream>
#include <algorithm>
using namespace std;
int j,n,x,i;
short v[20000010];
long long s;
int main()
{
    ifstream f("k1.in");
    ofstream g("k1.out");
    f>>n;
    for(i=1;i<=n;i++)
        f>>x,v[x]++;
    for(i=1;i<=20000000;i++)
    {
        if(v[i])
        {
            v[i*2]+=v[i]/2;
            s+=i*v[i];
            if(v[i]%2)
            {
                s-=i*v[i];
                v[i]=1;
                for(j=i+1;j<=20000000;j++)
                {
                    if(v[j])
                    {
                        if(v[i]<=v[j])
                        {
                            s+=v[i]*(i+j);
                            v[i+j]+=v[i];
                            v[j]-=v[i];
                            i=j;
                            break;
                        }
                        else
                        {
                            s+=v[j]*(i+j);
                            v[i+j]+=v[j];
                            v[j]=0;
                            v[i]-=v[j];
                        }
                    }
                }
            }
        }
    }
    g<<s<<'\n';
    return 0;
}