Cod sursa(job #210114)

Utilizator AndreiDDiaconeasa Andrei AndreiD Data 26 septembrie 2008 17:38:40
Problema Carnati Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <stdio.h>      
     
#define FIN "carnati.in"      
#define FOUT "carnati.out"      
#define NMAX 3000
     
struct abc
{
  int timp,pret;
}
v[NMAX];
int N;
long int P[NMAX];
int T[NMAX];
long int X,Y,C;
int i,j;
long int G;      
long long REZ=0;
     
long int max(long int a, long int b)      
{      
    if (a>b)      
        return a;      
        else     
        return b;      
}               
       
void read_data()      
{      
   freopen(FIN,"rt",stdin);      
   scanf("%d %ld", &N, &C);
   for (i=1;i<=N;++i)      
	 scanf("%d %ld", &v[i].timp, &v[i].pret);
}      
     
void solve()      
{      
 for(i=1;i<=N;++i)   
      {   
      X=0;   
      for(j=1;j<=N;++j)   
	  {
	  if(v[j].pret>=v[i].pret) G=v[i].pret;
			      else G=0;
	  Y=X-(v[j].timp-v[j-1].timp)*C+G;
	  Y=max(Y,G-C);
	  REZ=max(REZ,Y);
	  X=Y;
	  }
      }
}   
             
void write_data()      
{      
    freopen(FOUT,"wt",stdout);      
    printf("%lld", REZ);
}      
     
int main()      
{      
    read_data();      
    solve();      
    write_data();      
return 0;
}