Cod sursa(job #2191047)

Utilizator mirceagavrizimircea luca gavrizi mirceagavrizi Data 1 aprilie 2018 14:32:52
Problema Tribute Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.42 kb
int lin[50001],nrst[50001],sst[50001],nrdr[50001],sdr[50001],col[50001];
#include<stdio.h>
using namespace std;
int main(){
    freopen("tribute.in","r",stdin);
    freopen("tribute.out","w",stdout);
    int n,dx,dy,i,a,b,mxa,ss,minn,mxb,sum;
    ss=0;
    scanf("%d%d%d",&n,&dx,&dy);
    mxa=-1;
    mxb=-1;
    for(i=1;i<=n;i++){
        scanf("%d%d",&a,&b);
        if(a>mxa)
            mxa=a;
        if(b>mxb)
            mxb=b;
        lin[a]++;
        col[b]++;
    }
    for(i=0;i<=mxa;i++)
        nrst[i]=lin[i-1]+nrst[i-1];
    for(i=1;i<=mxa;i++)
        sst[i]=sst[i-1]+nrst[i];
    for(i=mxa;i>=0;i--)
        nrdr[i]=lin[i+1]+nrdr[i+1];
    for(i=mxa-1;i>=0;i--)
        sdr[i]=sdr[i+1]+nrdr[i];
    minn=2000000000;
    sum=0;
    for(i=0;i<=mxa-dx;i++){
        sum=sst[i]+sdr[i+dx];
        if(sum<minn)
            minn=sum;
    }
    ss=ss+minn;
    for(i=0;i<=mxa;i++){
        nrst[i]=0;
        nrdr[i]=0;
        sst[i]=0;
        sdr[i]=0;
    }
    for(i=0;i<=mxb;i++)
        nrst[i]=col[i-1]+nrst[i-1];
    for(i=1;i<=mxb;i++)
        sst[i]=sst[i-1]+nrst[i];
    for(i=mxb;i>=0;i--)
        nrdr[i]=col[i+1]+nrdr[i+1];
    for(i=mxb-1;i>=0;i--)
        sdr[i]=sdr[i+1]+nrdr[i];
    minn=2000000000;
    sum=0;
    for(i=0;i<=mxb-dy;i++){
        sum=sst[i]+sdr[i+dy];
        if(sum<minn)
            minn=sum;
    }
    ss=ss+minn;
    printf("%d",ss);
return 0;
}