Cod sursa(job #137222)

Utilizator FlorianFlorian Marcu Florian Data 17 februarie 2008 10:22:12
Problema Carnati Scor 20
Compilator cpp Status done
Runda preONI 2008, Runda 4, Clasa a 10-a Marime 1.12 kb
#include<stdio.h>
#include<stdlib.h>
FILE*f=fopen("carnati.in","r");
FILE*g=fopen("carnati.out","w");
typedef struct
   {
   int p,t;
   }Client;
int n,c,max,pret;
Client x[2004],a[2002];
int cmp(const void*a, const void*b)
    {
    return x[*(int*)a].t-x[*(int*)b].t;
    }
void read()
  {
  fscanf(f,"%d %d",&n,&c);
  int i;
  int h[2003];
  for(i=1;i<=n;++i)
        {
        fscanf(f,"%d %d",&x[i].t,&x[i].p);
        h[i]=i;
        }
  qsort(h,n+1,sizeof(int),cmp);
  for(i=1;i<=n;++i) a[i]=x[h[i]];
  }
void solve()
  {
  int cc,pr,l,i,j,k;
  for(i=1;i<=n;++i)
     {

     for(j=i;j>0;--j)
        {
        cc=0;
        if(a[j].p>=a[i].p)
          {
          cc+=a[i].p;
          for(k=j+1;k<=n;++k)
               {
               if(a[k].p>=a[i].p)
                  {
                  cc+=a[i].p;
                  l=a[k].t-a[j].t+1;
                  pr=cc-c*l;
                  if(max<pr) max=pr;
                  }
               }
           }
        }
     }
  }
int main()
  {
  read();
  solve();
  if(0>max) max=0;
  fprintf(g,"%d\n",max);
  return 0;
  }