Pagini recente » Cod sursa (job #382437) | Cod sursa (job #1050349) | Cod sursa (job #2268854) | Cod sursa (job #2705742) | Cod sursa (job #7664)
Cod sursa(job #7664)
#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;
}