Cod sursa(job #1395824)

Utilizator iarbaCrestez Paul iarba Data 21 martie 2015 15:55:32
Problema A+B Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.69 kb
#include <cstdio>
using namespace std;
int n,k,a[2201],i,x,y,lc[2201],cc[2201],lin,col,range,cost;
int main()
{
    freopen("naveplanare.in","r",stdin);
    freopen("naveplanare.out","w",stdout);
    scanf("%d%d",&n,&k);
    for(i=1;i<=n;i++)
    {
        scanf("%d%d",&x,&y);x+=1100;y+=1100;
        lc[x]++;if(lc[x]==1){lin++;}
        cc[y]++;if(cc[y]==1){col++;}
    }
    range=0;
    while(lin<k)
    {
        range++;
        for(i=100;i<=2100;i++)
        {
            if((lc[i]>=2)&&(lin<k))
            {
                if(lc[i-range]==0)
                {
                    cost+=range;
                    lc[i-range]++;
                    lc[i]--;
                    lin++;
                }
            }
            if((lc[i]>=2)&&(lin<k))
            {
                if(lc[i+range]==0)
                {
                    cost+=range;
                    lc[i+range]++;
                    lc[i]--;
                    lin++;
                }
            }
        }
    }range=0;
    while(col<k)
    {
        range++;
        for(i=100;i<=2100;i++)
        {
            if((cc[i]>=2)&&(col<k))
            {
                if(cc[i-range]==0)
                {
                    cost+=range;
                    cc[i-range]++;
                    cc[i]--;
                    col++;
                }
            }
            if((cc[i]>=2)&&(col<k))
            {
                if(cc[i+range]==0)
                {
                    cost+=range;
                    cc[i+range]++;
                    cc[i]--;
                    col++;
                }
            }
        }
    }
    printf("%d",cost);
return 0;
}