Cod sursa(job #7664)

Utilizator astronomyAirinei Adrian astronomy Data 21 ianuarie 2007 21:21:29
Problema Pachete Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.64 kb
#include <stdio.h>
#include <algorithm>
using namespace std;

#define MAXN (1 << 16)
#define INF 2000000010

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

int N, Na, Nb, Nc, Nd, res, x0, y0;
point P[MAXN], A[MAXN], B[MAXN], C[MAXN], D[MAXN];

int cmpac(point a, point b)
{
    return a.x > b.x;
}

int cmpbd(point a, point b)
{
    return a.x < b.x;
}

void solve(void)
{
    int i, k;
    
    for(i = 1; i <= N; i++)
    {
        if(P[i].x < x0 && P[i].y > y0)
            A[++Na] = P[i];
        if(P[i].x < x0 && P[i].y < y0)
            C[++Nc] = P[i];
        if(P[i].x > x0 && P[i].y > y0)
            B[++Nb] = P[i];
        if(P[i].x > x0 && P[i].y < y0)
            D[++Nd] = P[i];
    }

    sort(A+1, A+Na+1, cmpac), sort(C+1, C+Nc+1, cmpac);
    sort(B+1, B+Nb+1, cmpbd), sort(D+1, D+Nd+1, cmpbd);

    // pentru A
    for(A[0].y = INF, i = 1; i <= Na; i++)
     if(A[i].y < A[i-1].y)
        res++;
    // pentru B
    for(B[0].y = INF, i = 1; i <= Nb; i++)
     if(B[i].y < B[i-1].y)
        res++;
    // pentru C
    for(C[0].y = -1, i = 1; i <= Nc; i++)
     if(C[i].y > C[i-1].y)
        res++;
    for(D[0].y = -1, i = 1; i <= Nd; i++)
     if(D[i].y > D[i-1].y)
        res++;
}

void read_data(void)
{
    int i;

    scanf("%d\n", &N);
    scanf("%d %d\n", &x0, &y0);

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

void write_data(void)
{
    printf("%d\n", res);
}

int main(void)
{
    freopen("pachete.in", "rt", stdin);
    freopen("pachete.out", "wt", stdout);

    read_data();
    solve();
    write_data();

    return 0;
}