Cod sursa(job #1234956)

Utilizator alexpetrescuAlexandru Petrescu alexpetrescu Data 28 septembrie 2014 13:49:59
Problema Carnati Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <stdio.h>
#define NIL -1
#define INF 2000000000
#define MAXN 2000
#define MAXT 1500
int lista[MAXT+1], val[MAXN], next[MAXN];
int main(){
    int n, c, i, tmax, t, x, sc, smax, p, k;
    FILE *fin, *fout;
    fin=fopen("carnati.in", "r");
    fout=fopen("carnati.out", "w");
    fscanf(fin, "%d%d", &n, &c);
    for(i=0; i<=MAXT; i++){
        lista[i]=NIL;
    }
    tmax=-INF;
    for(i=0; i<n; i++){
        fscanf(fin, "%d%d", &t, &x);
        val[i]=x;
        next[i]=lista[t];
        lista[t]=i;
        if(tmax<t){
            tmax=t;
        }
    }
    smax=-INF;
    for(i=0; i<n; i++){
        k=val[i];
        sc=0;
        for(t=0; t<=tmax; t++){
            sc-=c;
            p=lista[t];
            while(p!=NIL){
                if(k<=val[p]){
                    sc+=k;
                }
                p=next[p];
            }
            if(smax<sc){
                smax=sc;
            }
            if(sc<0){
                sc=0;
            }
        }
    }
    fprintf(fout, "%d\n", smax);
    fclose(fin);
    fclose(fout);
    return 0;
}