Cod sursa(job #1884266)

Utilizator theodor.moroianuTheodor Moroianu theodor.moroianu Data 18 februarie 2017 16:32:41
Problema Carnati Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <cstdio>
#include <algorithm>
using namespace std;

pair <int, int> v[2100];
int n, c;

int pmax(int k);

int main()
{
    FILE *in(fopen("carnati.in", "r")), *out(fopen("carnati.out", "w"));

    fscanf(in, "%d%d", &n, &c);

    for (int i(1); i <= n; i++)
        fscanf(in, "%d%d", &v[i].first, &v[i].second);

    sort(v + 1, v + n + 1);

    int maxim(0);

    for (int i(1); i <= n; i++) {
        int x(pmax(v[i].second));
        if (maxim < x)
            maxim = x;
    }

    fprintf(out, "%d", maxim);
    return 0;
}

int pmax(int k)
{
    int best(0);
    if (v[1].second >= k)
        best = k - c;
    int l(best);

    for (int i(2); i <= n; i++) {
        l -= c * (v[i].first - v[i - 1].first);
        if (v[i].second >= k)
            l += k;
        if (k - c > l && v[i].second >= k)
            l = k - c;
        if (l > best)
            best = l;
    }

    return best;
}