Pagini recente » Cod sursa (job #1290085) | Cod sursa (job #2781556) | Cod sursa (job #3208472) | Cod sursa (job #3270469) | Cod sursa (job #6968)
Cod sursa(job #6968)
#include <stdio.h>
#include <stdlib.h>
#define NMAX 50005
FILE *f = fopen("pachete.in","rt"), *g = fopen("pachete.out","wt");
long int n,i,j,k,a[NMAX][2],cur[NMAX][2],pack[NMAX][2],start[2],sol,dir[2];
long int ord[NMAX];
void citire()
{
fscanf(f,"%ld",&n);
fscanf(f,"%ld %ld",&start[0],&start[1]);
for (i=1;i<=n;i++)
fscanf(f,"%ld %ld",&a[i][0],&a[i][1]);
}
int cmp(const void *x, const void *y)
{
return abs(cur[ * (long int *) x][0]) - abs(cur[ * (long int *) y][0]);
}
void nrpack()
{
for (i=1;i<=k;i++)
ord[i]=i;
qsort(ord, k+1, sizeof(long int),cmp);
long int dr=0,ok;
for (i=1;i<=k;i++)
{ok=0;
for (j=1;j<=dr;j++)
if (((cur[ord[i]][0]-pack[j][0]>0)==dir[0])&&((cur[ord[i]][1]-pack[j][1]>0)==dir[1]))
{pack[j][0]=cur[ord[i]][0];
pack[j][1]=cur[ord[i]][1];ok=1;}
if (!ok) {dr++;pack[dr][0]=cur[ord[i]][0];
pack[dr][1]=cur[ord[i]][1];}
}
sol+=dr;
}
void solve()
{
sol=0;
k=0;
for (i=1;i<=n;i++)
if (a[i][0]<start[0]&&a[i][1]<start[1])
{cur[++k][0]=a[i][0];cur[k][1]=a[i][1];}
dir[0]=0;dir[1]=0;
nrpack();
k=0;
for (i=1;i<=n;i++)
if (a[i][0]>start[0]&&a[i][1]<start[1])
{cur[++k][0]=a[i][0];cur[k][1]=a[i][1];}
dir[0]=1;dir[1]=0;
nrpack();
k=0;
for (i=1;i<=n;i++)
if (a[i][0]<start[0]&&a[i][1]>start[1])
{cur[++k][0]=a[i][0];cur[k][1]=a[i][1];}
dir[0]=0;dir[1]=1;
nrpack();
k=0;
for (i=1;i<=n;i++)
if (a[i][0]>start[0]&&a[i][1]>start[1])
{cur[++k][0]=a[i][0];cur[k][1]=a[i][1];}
dir[0]=1;dir[1]=1;
nrpack();
fprintf(g,"%ld",sol);
}
int main()
{
citire();
solve();
fclose(f);
fclose(g);
return 0;
}