Cod sursa(job #1777754)

Utilizator giotoPopescu Ioan gioto Data 12 octombrie 2016 20:57:02
Problema Avioane Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <cstdio>
#include <algorithm>
using namespace std;

int n;
long long a[100002];
int main()
{
    freopen("avioane.in", "r", stdin);
    freopen("avioane.out", "w", stdout);
    scanf("%d", &n);
    for(int i = 1; i <= n; ++i)
        scanf("%lld", &a[i]);
    sort(a + 1, a + n + 1);
    long long Max = a[1] * n;
    int Front = 1;
    for(int i = 2; i <= n ; ++i){
        long long Sum = (long long)(n - i + 1) * a[i];
        int m = i - Front - 1;
        long long PM = a[Front] * (long long)(m + 1);
        for(int j = Front; j < i ; ++j){
            long long P = a[j] * (long long) m;
            --m;
            if(P >= PM) {
                Front = j;
                PM = P;
            }
        }
        if(Sum + PM > Max)
            Max = Sum + PM;
    }
    printf("%lld", Max);
    return 0;
}