Cod sursa(job #588314)

Utilizator AndrewTheGreatAndrei Alexandrescu AndrewTheGreat Data 7 mai 2011 17:56:51
Problema Avioane Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.2 kb
#include <iostream>
#include <stdio.h>
#include <algorithm>

using namespace std;

const int nmax = 100100;
int N, V[nmax], A[nmax], i, j;
int maxi, cate, maximum, add, poz;
int P, maxi2;

int main()
{
    freopen ("avioane.in", "r", stdin);
    freopen ("avioane.out", "w", stdout);

    scanf("%d", &N);
    for(i = 1; i <= N; i++)
        scanf("%d", &A[i]);

    sort(A + 1, A + 1 + N);

    for(i = N; i; i--)
    {
        V[i] = A[i] * (N - i + 1);
        if(maxi < V[i])
            maxi = V[i], poz = i;
    }



    maxi = 0;
    for(i = N; i >= poz; i--)
        if(maxi < (N - i + 1) * (A[i] - A[poz]))
        {
            maxi = (N - i + 1) * (A[i] - A[poz]);
            P = i;
        }
    maximum = maxi + V[poz];

    for(i = poz - 1; i; i--)
    {
        cate = N - P + 1;
        maxi = V[i] - cate * A[i] + cate * A[P];
        maxi2 = maxi;

        P++;
        do{
            P--;
            maxi = maxi2;

            cate = N - (P - 1) + 1;
            maxi2 = V[i] - cate * A[i] + cate * A[P - 1];
        } while( maxi2 > maxi);

        if(maxi > maximum)
            maximum = maxi;
    }
    printf("%d\n", maximum);

    return 0;
}