Cod sursa(job #1019683)

Utilizator sleepaholicNeculaescu Theodor sleepaholic Data 31 octombrie 2013 19:34:22
Problema Carnati Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f("carnati.in");
ofstream g("carnati.out");
int n,c;
struct client
{int t,p;};
client cl[2005];
bool comp(client x,client y)
{ if (x.t!=y.t)
   return x.t<y.t;
  return x.p<y.p;
}

void Read()
{ int i;
   f>>n>>c;
  for(i=1;i<=n;i++)
    f>>cl[i].t>>cl[i].p;
  sort(cl+1,cl+n+1,comp);
}
int Ans(int price)
{ int i,mn,set=0,nr=0,sol=0;
   for(i=1;i<=n;i++)
   { if (price<=cl[i].p)
      {nr++;
      if (set)
       {if (nr*price-cl[i].t*c-mn>sol) sol=nr*price-cl[i].t*c-mn;
         mn=min(mn,nr*price-cl[i].t*c+c-price);
       }
      else {set=1;mn=nr*price-cl[i].t*c+c-price;}
        if (price-c>sol) sol=price-c;
      }

  }
return sol;
}
int main()
{ int i,res=-(1<<31);
    Read();
     for(i=1;i<=n;i++)
      res=max(res,Ans(cl[i].p));
    g<<res;
    return 0;
}