Pagini recente » Cod sursa (job #1052387) | Cod sursa (job #220827) | Cod sursa (job #1521138) | Cod sursa (job #2242584) | Cod sursa (job #137576)
Cod sursa(job #137576)
#include<stdio.h>
#include<string.h>
long maxim,*p,a[2000],b[2000],d[2000],n,c,i,j;
void sort(int l,int r)
{int i,j,x,y;
i=l;j=r;x=a[(l+r)/2];
do
{
while (a[i]<x) i++;
while (a[j]>x) j--;
if (i<=j)
{
y=a[i];a[i]=a[j];a[j]=y;
y=b[i];b[i]=b[j];b[j]=y;
i++;j--;
}
}while (i<=j);
if (l<j) sort(l,j);
if (i<r) sort(i,r);
}
void verif(long nr,long b[2000])
{int i,j,w;
for(i=1;i<=n;i++)
{
if (b[i]>=nr)
{
if (nr-c>maxim)
{
maxim=nr-c;
}
j=i-1;
while (b[j]<0) j--;
if (b[j]>0)
{
if ((b[j]+nr)-(a[i]-a[j])*c>b[i])
b[i]=(b[j]+nr)-(a[i]-a[j])*c;
if ((b[j]+nr)-(a[i]-a[j])*c>maxim)
{
maxim=(b[j]+nr)-(a[i]-a[j])*c;
b[i]=maxim;
}
}
else
b[i]=nr-c;
}
else
b[i]=-1;
}
}
/*long long max(long long a,long long b)
{long long q;
if (a>b) return a;
else return b;
}*/
int main()
{
freopen("carnati.in","r",stdin);
freopen("carnati.out","w",stdout);
scanf("%ld %ld",&n,&c);
for (i=1;i<=n;i++)
scanf("%d %d",&a[i],&b[i]);
sort(1,n);
for (i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
d[j]=b[j];
verif(b[i],d);
}
printf("%ld\n",maxim);
return 0;
}