Pagini recente » Arhiva de probleme | Cod sursa (job #2262640) | Cod sursa (job #291134) | Cod sursa (job #2927743) | Cod sursa (job #7146)
Cod sursa(job #7146)
#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;
}