Cod sursa(job #585663)

Utilizator Marius96Marius Gavrilescu Marius96 Data 30 aprilie 2011 10:49:40
Problema Avioane Scor 50
Compilator cpp Status done
Runda Algoritmiada 2011, Runda Finală, Clasele 5-9 Marime 0.98 kb
#include<cstdio>
#include<algorithm>
using std::sort;
int v[100005];
int b,e,ms,n;
bool calibb(){
    int ib=b,s;
    for(int i=e+1;i<n;i++){
        s=(n-i)*v[i]+(i-e)*v[e];
        if(s>ms)b=i,ms=s;
    }
    return b!=ib;
}
bool calibe(){
    int ie=e,s;
    for(int i=0;i<b;i++){
        s=(b-i)*v[i]+(n-b)*v[b];
        if(s>ms)e=i,ms=s;
    }
    return e!=ie;
}
int main(){
    freopen("avioane.in","r",stdin);
    freopen("avioane.out","w",stdout);
    scanf("%d",&n);
    for(int i=0;i<n;i++)
        scanf("%d",v+i);
    sort(v,v+n);
    //for(int i=0;i<n;i++)printf("%d ",v[i]);
    //printf("\n");
    /*
    int s=0,ms=0;
    for(int b=1;b<n;b++)
        for(int e=0;e<b;e++){
            s=(b-e)*v[e]+(n-b)*v[b];
            ms=s>ms?s:ms;
            if(s==129)
                printf("%d %d\n",e,b);
        }
    */
    e=-1,b=n;
    bool ok=true;
    while(ok){
        ok=false;
        ok=calibe();
        if(calibb())
            ok=true;
    }
    printf("%d",ms);
    return 0;
}