Pagini recente » Cod sursa (job #470820) | Cod sursa (job #2790326) | Cod sursa (job #1491061) | Cod sursa (job #801349) | Cod sursa (job #368859)
Cod sursa(job #368859)
#include<cstdio>
#include<algorithm>
using namespace std;
int n,c,i,j,p1,p3,p1max,ptreads,maxim,zz,ptmax,ptmax2,ptmax3,z1;
struct omg
{
int x,y;
};
omg a[2002];
bool comp(const omg &a, const omg &b)
{
if(a.x>b.x) return false;
return true;
}
int main()
{
freopen("carnati.in","r",stdin);
freopen("carnati.out","w",stdout);
scanf("%d%d",&n,&c);
for(i=1;i<=n;++i)
{
scanf("%d%d",&a[i].x,&a[i].y);
}
sort(a+1,a+n+1,comp); // I has a bucket
maxim=0;
a[n+1].y=0; a[0].y=0; p1max=0; ptmax2=ptmax3=0;
for(i=1;i<=n;++i)
{
ptreads=a[i].y;
p1=0; //p2=0; p3=0;
for(j=1;j<=n;++j)
{
if(a[j].y>=ptreads)
{
if(p1==0)
{
p1=j;
//p2=j;
p3=ptreads;
}
else
{
//p2=j;
p3=p3+ptreads-c*(a[j].x-a[j-1].x);
}
}
else p3-=c*(a[j].x-a[j-1].x);
if(p3<0)
{
//NOOOOO THEY BE STEALIN' MAH BUCKET
p1=0;
//p2=0;
p3=0;
}
if(p3>=maxim)
{
if(maxim==p3)
{
ptmax3=ptmax2;
ptmax2=p1;
}
else p1max=p1;
ptmax=ptreads;
maxim=p3;
}
}
}
if(maxim-c<0)
printf("%d\n",maxim);
else
{
zz=maxim-c; z1=zz;
if(zz+a[p1max-1].y-c*(a[p1max].x-a[p1max-1].x)>zz && a[p1max-1].y>=ptmax)
zz=zz+a[p1max-1].y-c*(a[p1max].x-a[p1max-1].x);
if(z1+a[ptmax2-1].y-c*(a[ptmax2].x-a[ptmax2-1].x)>zz && a[ptmax2-1].y>=ptmax2 && ptmax3>0)
zz=z1+a[ptmax2-1].y-c*(a[ptmax2].x-a[ptmax2-1].x);
else if(z1+a[ptmax3-1].y-c*(a[ptmax3].x-a[ptmax3-1].x)>zz && a[ptmax3-1].y>=ptmax3 && ptmax3>0)
zz=z1+a[ptmax3-1].y-c*(a[ptmax3].x-a[ptmax3-1].x);
printf("%d\n",zz);
}
return 0;
}