Cod sursa(job #2636339)

Utilizator Senth30Denis-Florin Cringanu Senth30 Data 17 iulie 2020 16:11:15
Problema Avioane Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.31 kb
#include <bits/stdc++.h>
#define MAX 131072
#define MOD 98999
#define INF 2100000000
#define eps 1e-5

using namespace std;
const int NMAX = 100100;

FILE *IN, *OUT;

int N;
int v[NMAX];

int pos, sign, out;
char f[MAX], Out[NMAX], str[10];

inline void Read(int &nr){
    sign = 0;
    nr = 0;
    while(f[pos] < '0' || f[pos] > '9'){
        if(f[pos] == '-') sign = 1;
        pos++;
        if(pos == MAX)
            fread(f, MAX, 1, IN), pos = 0;
    }
    while(f[pos] >= '0' && f[pos] <= '9'){
        nr = 10 * nr + f[pos++] - '0';
        if(pos == MAX)
            fread(f, MAX, 1, IN), pos = 0;
    }
    if(sign) nr =- nr;
}

void read(){
    Read(N);
    for(int i = 1; i <= N; i++)
        Read(v[i]);
    sort(v + 1, v + N + 1);
}

int main(){

    IN = fopen("avioane.in", "r");
    OUT = fopen("avioane.out", "w");

    read();
    int idx;
    long long vMax = -INF, ans = 0;
    for(int i = 1; i <= N; i++)
        if(v[i] * (N - i + 1) > vMax){
            vMax = v[i] * (N - i + 1);
            idx = i;
        }
    ans = vMax; vMax = -INF;
    for(int i = idx + 1; i <= N; i++){
        v[i] -= v[idx];
        if(v[i] * (N - i + 1) > vMax)
            vMax = v[i] * (N - i + 1);
    }
    ans += vMax;
    fprintf(OUT, "%lld", ans);

    return 0;
}