Cod sursa(job #1674187)

Utilizator andy1207Cioltan Andrei andy1207 Data 4 aprilie 2016 14:38:51
Problema Tribute Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.29 kb
#include<cstdio>
int vl[50001];
int vc[50001];
int vv[50001];
int main()
{
    int n,dx,dy,maxx,maxy,i,a,b,f,st,dr,min,j,s,t,min1,in,sf,e,dr1;
    freopen("tribute.in","r",stdin);
    freopen("tribute.out","w",stdout);
    scanf("%d%d%d",&n,&dx,&dy);
    maxx=maxy=-1;
    s=t=0;
    dr=dr1=0;
    for(i=1; i<=n; i++)
    {
        scanf("%d%d",&a,&b);
        vl[a]++;///lini
        vc[b]++;///coloane
        if(a>dx)
            dr++;
        if(b>dy)
            dr1++;
        if(a>dx)
            s=s+a-dx;
        if(b>dy)
            t=t+b-dy;

        if(a>maxx)
            maxx=a;
        if(b>maxy)
            maxy=b;
    }
    st=0;
    in=0;
    sf=dx;
    e=s;
    min=e;
    while(sf<maxx)
    {
        st+=vl[in];
        e+=st;
        in++;

        sf++;
        e-=dr;
        dr-=vl[sf];

        //printf("intre %d si %d am %d\n", in, sf, e);
        if (e < min)
            min = e;
    }
    st=0;
    dr=dr1;
    in=0;
    sf=dy;
    e=t;
    min1=e;
    //printf("pe Ox: %d\n", min);
    while(sf<maxy)
    {
        st+=vc[in];
        e+=st;
        in++;

        sf++;
        e-=dr;
        dr-=vc[sf];

        //printf("intre %d si %d am %d\n", in, sf, e);
        if(e<min1)
            min1=e;
    }
    //printf("pe Oy: %d\n", min1);
    printf("%d\n",min + min1);
    return 0;
}