Cod sursa(job #475330)

Utilizator DraStiKDragos Oprica DraStiK Data 6 august 2010 17:04:31
Problema Pachete Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.36 kb
#include <algorithm>
#include <vector>
#include <set>
using namespace std;

#define pb push_back
#define mp make_pair
#define sc second
#define fs first
#define DIM 5

vector <pair <int,int> > v[DIM];
int n,sx,sy,nrt;
set <int> a;

inline int cad (int x,int y)
{
    if (x>0 && y>0)
        return 1;
    if (x<0 && y>0)
        return 2;
    if (x<0 && y<0)
        return 3;
    if (x>0 && y<0)
        return 4;
    return 0;
}

void read ()
{
    int i,x,y;

    scanf ("%d%d%d",&n,&sx,&sy);
    for (i=1; i<=n; ++i)
    {
        scanf ("%d%d",&x,&y);
        x-=sx; y-=sy;
        v[cad (x,y)].pb (mp (abs (x),abs (y)));
    }
}

inline int calc (int cad)
{
    vector <pair <int,int> > :: iterator itv;
    set <int> :: iterator ita;
    int nrc;

    nrc=0;
    a.clear ();
    sort (v[cad].begin (),v[cad].end ());
    for (itv=v[cad].begin (); itv!=v[cad].end (); ++itv)
    {
        ita=a.lower_bound (itv->sc);
        if (ita==a.begin ())
            ++nrc;
        else
            a.erase (--ita);
        a.insert (itv->sc);
    }
    return nrc;
}

void solve ()
{
    int i;

    for (i=1; i<DIM; ++i)
        nrt+=calc (i);
    printf ("%d",nrt);
}

int main ()
{
    freopen ("pachete.in","r",stdin);
    freopen ("pachete.out","w",stdout);

    read ();
    solve ();

    return 0;
}