Cod sursa(job #7146)

Utilizator snaked31Stanica Andrei snaked31 Data 21 ianuarie 2007 12:50:35
Problema Pachete Scor 0
Compilator cpp Status done
Runda preONI 2007, Runda 1, Clasa a 10-a Marime 3.83 kb
#include <stdio.h>
#include <algorithm>
#include <vector>

using namespace std;

typedef struct punct {int x; int y;} point;

/*int operator<(const point &a, const point &b)

{
	if (a.x == b.x)
	{
    	return (a.y < b.y);
    }
    else
    	return (a.x < b.x);
}*/

struct intu {int t;};

int k;
#define nm 50010

point p[nm];
intu a[nm], b[nm], c[nm], d[nm];

int operator<(const intu &a, const intu &b)

{
	if (k == 1)
	{
        if (p[a.t].x == p[b.t].x)
        	return (p[a.t].y < p[b.t].y);
        else
        	return (p[a.t].x < p[b.t].x);
    }
    else
    if (k == 2)
    {
        if (p[a.t].x == p[b.t].x)
        	return (p[a.t].y > p[b.t].y);
        else
        	return (p[a.t].x < p[b.t].x);
    }
    else
    if (k == 3)
    {
        if (p[a.t].x == p[b.t].x)
        	return (p[a.t].y < p[b.t].y);
        else
        	return (p[a.t].x > p[b.t].x);
    }
    else
    {
        if (p[a.t].x == p[b.t].x)
        	return (p[a.t].y > p[b.t].y);
        else
        	return (p[a.t].x > p[b.t].x);
    }
}


int viza[nm], vizb[nm], vizc[nm], vizd[nm];
int i, X, Y, j, sol, n, l;


void read()

{
	scanf("%d", &n);
    scanf("%d %d", &X, &Y);

    p[0].x = X;
    p[0].y = Y;

    for (i=1; i<=n; i++)
    	scanf("%d %d", &p[i].x, &p[i].y);

//    sort(p+1, p+n+1);

    for (i=1; i<=n; i++)
    {
        if (p[i].x >= X)
        {
            if (p[i].y >= Y)
            {
            	a[++a[0].t].t = i;
            }
            if (p[i].y <= Y)
            {
                b[++b[0].t].t = i;
            }
        }
        if (p[i].x <= X)
        {
            if (p[i].y >= Y)
            {
                c[++c[0].t].t = i;
            }
            if (p[i].y <= Y)
            {
            	d[++d[0].t].t = i;
            }
        }
    }
    k = 1;
    sort(a+1, a+a[0].t+1);
    k = 2;
    sort(b+1, b+b[0].t+1);
    k = 3;
    sort(c+1, c+c[0].t+1);
    k = 4;
    sort(d+1, d+d[0].t+1);

}


void solve()

{
	sol = n;
	for (i=a[0].t; i>0; i--)
    {
        if (viza[a[i].t] == 0)
        {
        	viza[a[i].t] = 1;
            for (j=i -1; j>0; j--)
            {
                if (p[a[j].t].x <= p[a[i].t].x && p[a[j].t].y <= p[a[i].t].y && viza[a[j].t] == 0)
                {
                	sol --;
                    viza[a[j].t] = 1;
                }
            }
        }
    }

    for (i=b[0].t; i>0; i--)
    {
        if (vizb[b[i].t] == 0)
        {
        	vizb[b[i].t] = 1;
            for (j=i -1; j>0; j--)
            {
                if (p[b[j].t].x <= p[b[i].t].x && p[b[j].t].y >= p[b[i].t].y && vizb[b[j].t] == 0)
                {
                	sol --;
                    vizb[b[j].t] = 1;
                }
            }
        }
    }

    for (i=c[0].t; i>0; i--)
    {
        if (vizc[c[i].t] == 0)
        {
        	vizc[c[i].t] = 1;
            for (j=i -1; j>0; j--)
            {
                if (p[c[j].t].x >= p[c[i].t].x && p[c[j].t].y <= p[c[i].t].y && vizc[c[j].t] == 0)
                {
                	sol --;
                    vizc[c[j].t] = 1;
                }
            }
        }
    }

    for (i=d[0].t; i>0; i--)
    {
        if (vizd[d[i].t] == 0)
        {
        	vizd[d[i].t] = 1;
            for (j=i -1; j>0; j--)
            {
                if (p[d[j].t].x >= p[d[i].t].x && p[d[j].t].y >= p[d[i].t].y && vizd[d[j].t] == 0)
                {
                	sol --;
                    vizd[d[j].t] = 1;
                }
            }
        }
    }

}


void write()

{
	printf("%d\n", sol);
}


int main()

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

    read();
    solve();
    write();

    fclose(stdin);
    fclose(stdout);

	return 0;
}