Cod sursa(job #585795)

Utilizator Magnuscont cu nume gresit sau fals Magnus Data 30 aprilie 2011 11:53:49
Problema Avioane Scor 30
Compilator cpp Status done
Runda Algoritmiada 2011, Runda Finală, Clasele 5-9 Marime 1.13 kb
#include <stdio.h>
#include <algorithm>

using namespace std;

long long n,maxx,s,i,ind,v[100010],v2[100010],left,right,sol;

int main()
{
    freopen("avioane.in","r",stdin);
    freopen("avioane.out","w",stdout);
    scanf("%lld",&n);
    for (i=1;i<=n;++i)
    {
        scanf("%lld",&v[i]);
    }
    sort(v+1,v+n+1);
    for (i=1;i<=n;++i)
        v2[i]=v[i];
    for (i=1;i<=n;++i)
        if (v[i]*(n-i+1)>maxx)
        {
            maxx=v[i]*(n-i+1);
            ind=i;
        }
    left=ind-150;right=ind+150;
    if (left<1) left=1;
    if (right>n) right=n;
    for (ind=left;ind<=right;++ind)
    {
        s=0;
        for (i=1;i<=n;++i)
            v[i]=v2[i];
        maxx=v[ind]*(n-ind+1);
        s+=maxx;
        maxx/=(n-ind+1);
        for (i=ind;i<=n;++i)
            v[i]-=maxx;
        maxx=0;
        for (i=ind;i<=n;++i)
            if (v[i]*(n-i+1)>maxx)
                maxx=v[i]*(n-i+1);
        for (i=1;i<ind;++i)
            if (v[i]*(ind-i)>maxx)
                maxx=v[i]*(ind-i);
        s+=maxx;
        if (s>sol) sol=s;
    }
    printf("%lld",sol);
    return 0;
}