Cod sursa(job #2330056)

Utilizator DragosArseneDragos Arsene DragosArsene Data 27 ianuarie 2019 20:02:17
Problema Carnati Scor 50
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <iostream>
#include <algorithm>
#include <stdio.h>
using namespace std;
int v[4001];
struct ura{short t; int p;};
ura cr[2001];

bool cmp(ura a, ura b){
return (a.t < b.t);
}
int main() {
    FILE *fin, *fout;
    int n, i, j, min, tcurent, inceput, c, l, max, maxxx=0, sum;

fin = fopen("carnati.in", "r");
fout = fopen("carnati.out", "w");

fscanf(fin,"%d%d", &n, &c);
for(i=1;i<=n;i++){
    fscanf(fin,"%hd%d", &cr[i].t, &cr[i].p);
}

sort(cr+1,cr+n+1,cmp);





min=cr[1].p;
inceput=1;

for(i=1;i<=n;i++){
    min = cr[i].p;
    v[1]=-(cr[1].t-1)*c;
    j=2;
    l=1;
    while(j<=2*n){
    if(cr[l].p>=min)
    v[j]=min-c;
    else
    v[j]=-c;

    j++;
    v[j]=-(cr[l+1].t-cr[l].t-1)*c;
    j++;
    l++;


    }

    max=0;
    sum=0;
    for(j=1;j<=2*n-1;j++){
        if(sum+v[j]<0){
            v[j]=0;
            sum=0;
        }
        else{
            v[j]=sum+v[j];
            sum=v[j];
        }
    if(v[j]>max)
            max=v[j];
    }



    if(max>maxxx)
        maxxx=max;

}







fprintf(fout,"%d", maxxx);
fclose(fin);
fclose(fout);

    return 0;
}