Cod sursa(job #1264592)

Utilizator sebinechitasebi nechita sebinechita Data 15 noiembrie 2014 22:38:30
Problema Tribute Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.5 kb
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin("tribute.in");
ofstream fout("tribute.out");
#define MAX 50003

int x[MAX], y[MAX];

int main()
{
    int s=0, n, dx, dy, i, st, dr, rezx, rezy;
    fin>>n;
    fin>>dx>>dy;
    for(i=1;i<=n;i++)
    {
        fin>>x[i]>>y[i];
    }
    sort(x+1, x+n+1);
    sort(y+1, y+n+1);
    st=dr=(n+1)/2;
    x[0]=-1000000;
    x[n+1]=1000000;
    while(x[dr]-x[st]<=dx)
    {
        if(x[dr+1]-x[st]<=dx)
            dr++;
        else
        {
            rezx=x[st];
            rezy=x[st]+dx;
            break;
        }
        if(x[dr]-x[st-1]<=dx)
            st--;
        else
        {
            rezx=x[dr]-dx;
            rezy=x[dr];
            break;
        }
    }
    for(i=1;i<=n;i++)
    {
        if(x[i]<rezx)
            s+=rezx-x[i];
        else if(x[i]>rezy)
            s+=x[i]-rezy;
    }
    st=dr=(n+1)/2;
    y[0]=-1000000;
    y[n+1]=1000000;
    while(y[dr]-y[st]<=dy)
    {
        if(y[dr+1]-y[st]<=dy)
            dr++;
        else
        {
            rezx=y[st];
            rezy=y[st]+dy;
            break;
        }
        if(y[dr]-y[st-1]<=dy)
            st--;
        else
        {
            rezx=y[dr]-dy;
            rezy=y[dr];
            break;
        }
    }
    for(i=1;i<=n;i++)
    {
        if(y[i]<rezx)
            s+=rezx-y[i];
        else if(y[i]>rezy)
            s+=y[i]-rezy;
    }
    fout << s;
}