Cod sursa(job #6884)

Utilizator devilkindSavin Tiberiu devilkind Data 21 ianuarie 2007 10:27:52
Problema Pachete Scor 0
Compilator cpp Status done
Runda preONI 2007, Runda 1, Clasa a 10-a Marime 1.42 kb
#include <stdio.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];


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]);
}

void nrpack()
{
long int dr=0,ok;
for (i=1;i<=k;i++)
    {ok=0;
    for (j=1;j<=dr;j++)
        if (((cur[i][0]-pack[j][0]>0)==dir[0])&&((cur[i][1]-pack[j][1]>0)==dir[1]))
           {pack[j][0]=cur[i][0];
           pack[j][1]=cur[i][1];ok=1;}
    if (!ok) {dr++;pack[dr][0]=cur[i][0];
             pack[dr][1]=cur[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;    
}