Cod sursa(job #881277)

Utilizator MagnvsDaniel Constantin Anghel Magnvs Data 17 februarie 2013 21:01:12
Problema Tribute Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.48 kb
#include <stdio.h>
 
int v[2][50001],n,dx,dy,minx,miny,bef,aft,s;
 
void quicksort(int l,int r,int z)
{
    int i=l,j=r,aux,mid=v[z][(l+r)/2];
    while (i <= j)
    {
        while (v[z][i]<mid) i++;
        while (v[z][j]>mid) j--;
        if (i <= j)
        {
            aux=v[z][i];v[z][i]=v[z][j];v[z][j]=aux;
            aux=v[1-z][i];v[1-z][i]=v[1-z][j];v[1-z][j]=aux;
            i++;
            j--;
        }
    }
    if (l<j) quicksort(l,j,z);
    if (i<r) quicksort(i,r,z);
}
 
int main()
{
    int l,r,i;
    minx=625000000;miny=625000000;
    freopen("tribute.in","r",stdin);
    freopen("tribute.out","w",stdout);
    scanf("%d%d%d",&n,&dx,&dy);
    for (i=1;i<=n;i++) scanf("%d%d",&v[0][i],&v[1][i]);
    ++dx;++dy;
    quicksort(1,n,0);
    bef=0;aft=1;
    l=v[0][1];r=l+dx-1;
    while (v[0][aft]<=r) ++aft;
    for (i=aft;i<=n;i++) s+=v[0][i]-r;
    while (r<v[0][n])
    {
        ++l;++r;
        s+=bef;
        s=s-n+aft-1;
        while (v[0][bef+1]<l) {++bef;++s;}
        while ((v[0][aft]<=r)&&(aft<n)) ++aft;
        if (s<minx) minx=s;
    }
    if (s<minx) minx=s;
    quicksort(1,n,1);
    bef=0;aft=1;s=0;
    l=v[1][1];r=l+dy-1;
    while (v[1][aft]<=r) ++aft;
    for (i=aft;i<=n;i++) s+=v[1][i]-r;
    while (r<v[1][n])
    {
        ++l;++r;
        s+=bef;
        s=s-n+aft-1;
        while (v[1][bef+1]<l) {++bef;++s;}
        while ((v[1][aft]<=r)&&(aft<n)) ++aft;
        if (s<miny) miny=s;
    }
    if (s<miny) miny=s;
    printf("%d",minx+miny);
    return 0;
}