Cod sursă (job #157713)

Utilizator avatar 1Anonymus Robert Vadastreanu 1Anonymus IP ascuns
Problemă Lanterna Compilator cpp | 1,24 kb
Rundă Arhiva de probleme Status evaluat
Dată 3 oct. 2015 21:53:24 Scor 60
#include <fstream>
using namespace std;
ifstream fin("lanterna.in");
ofstream fout("lanterna.out");
int n,x[100001],v[100001];
void interclasare(int p,int u){
    int m,k;
    m=(p+u)/2;
    k=0;
    int i,j;
    i=p;
    j=m+1;
    while(i<=m && j<=u){
        if(x[i]>x[j]){
            k++;
            v[k]=x[j];
            j++;
        }
        else{
            k++;
            v[k]=x[i];
            i++;
        }
    }
    while(i<=m){
        k++;
        v[k]=x[i];
        i++;
    }
    while(j<=u){
        k++;
        v[k]=x[j];
        j++;
    }
    int w=0;
    for(i=p;i<=u;i++){
        w++;
        x[i]=v[w];
    }
}
void mergesort(int p,int u){
    int k;
    if(p<u){
        k=(p+u)/2;
        mergesort(p,k);
        mergesort(k+1,u);
        interclasare(p,u);
    }
}
int main()
{
    fin>>n;
    int i,j;
    for(i=1;i<=n;i++)
        fin>>x[i];
    fin.close();
    mergesort(1,n);
    int s=0,a,b;
    while(n>3)
    {
        a=x[1]+x[2]+x[2]+x[n];
        b=x[1]*2+x[n-1]+x[n];
        if(a>b)
            s=s+b;
        else
            s=s+a;
        n-=2;
    }
    if(n==3)
    s=s+x[1]+x[2]+x[3];
    else
        s=s+x[2];
    fout<<s;
    return 0;
}