Cod sursa(job #587862)

Utilizator AndrewTheGreatAndrei Alexandrescu AndrewTheGreat Data 6 mai 2011 11:42:27
Problema Avioane Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 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 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]);
            cate = N - i + 1;
            add = (N - i + 1) * A[i];
        }
    maximum = maxi + V[poz];

    for(i = poz - 1; i; i--)
        if(V[i] - cate * A[i] + add > maximum)
            maximum = V[i] - cate * A[i] + add;

    printf("%d\n", maximum);

    return 0;
}