Cod sursa(job #1821155)

Utilizator Coroian_DavidCoroian David Coroian_David Data 2 decembrie 2016 18:51:07
Problema Carnati Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 kb
#include <cstdio>

#include <algorithm>

using namespace std;

FILE *f, *g;

int n, c;

int mx;

struct client
{
    int t, c;
};

client v[2001];

void readFile()
{
    f = fopen("carnati.in", "r");

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

    int i;

    for(i = 1; i <= n; i ++)
        fscanf(f, "%d%d", &v[i].t, &v[i].c);

    fclose(f);
}

bool cmp(client a, client b)
{
    return (a.t < b.t ? true : false);
}

inline int mxa(int a, int b)
{
    return (a > b ? a : b);
}

void solve()
{
    sort(v + 1, v + n + 1, cmp);

    int i, j;

    int profit, profitVechi;

    v[0].t = v[1].t - 1;

    for(j = 1; j <= n; j ++)
    {
        profitVechi = 0;

        for(i = 1; i <= n; i ++)
        {
            profit = 0;

            if(v[j].c <= v[i].c)
                profit = v[j].c;

            profit = mxa(profit - c, profit + profitVechi - c * (v[i].t - v[i - 1].t));

            mx = mxa(mx, profit);

            profitVechi = profit;
        }
    }
}

void printFile()
{
    g = fopen("carnati.out", "w");

    fprintf(g, "%d\n", mx);

    fclose(g);
}

int main()
{
    readFile();

    solve();

    printFile();

    return 0;
}