Cod sursa(job #7322)

Utilizator robbyRobertino robert robby Data 21 ianuarie 2007 13:26:53
Problema Pachete Scor 0
Compilator cpp Status done
Runda preONI 2007, Runda 1, Clasa a 10-a Marime 2.38 kb
#include <stdio.h>
#include <stdlib.h>
#define nmax 1001
//50001
FILE *f,*g;
long a[nmax][2];

long c1[nmax][2],c2[nmax][2],c3[nmax][2],c4[nmax][2],prev[nmax][2];
long n1,n2,n3,n4,nn;

int compare(const void *a,const void *b)
{
   return (*(long*)a-*(long*)b);
}


int main()
{
   long n,x,y,i,nr,j,ok;
   FILE *f=fopen("pachete.in","rt");
   FILE *g=fopen("pachete.out","wt");
   fscanf(f,"%ld",&n);
   fscanf(f,"%ld %ld",&x,&y);
   nr=n;
   n1=n2=n3=n4=-1;
   for (i=1;i<=n;i++)
	 {
	   fscanf(f,"%ld %ld",&a[i][0],&a[i][1]);

	   if (a[i][0]>x&&a[i][1]<=y)
		 {
		   c1[++n1][0]=a[i][0];
		   c1[n1][1]=a[i][1];
		 }

	   if (a[i][0]>x&&a[i][1]>y)
		 {
		   c2[++n2][0]=a[i][0];
		   c2[n2][1]=a[i][1];
		 }

	   if (a[i][0]<x&&a[i][1]>y)
		 {
		   c3[++n3][0]=a[i][0];
		   c3[n3][1]=a[i][1];
		 }

	   if (a[i][0]<=x&&a[i][1]<y)
		 {
		   c4[++n4][0]=a[i][0];
		   c4[n4][1]=a[i][1];
		 }
	 }
   if (n1>-1)
	 qsort(c1,n1,sizeof(long),compare);
   if (n2>-1)
	 qsort(c2,n2,sizeof(long),compare);
   if (n3>-1)
	 qsort(c3,n3,sizeof(long),compare);
   if (n4>-1)
	 qsort(c4,n4,sizeof(long),compare);
   nn=0;
//cadranul 1
   for (i=0;i<=n1;i++)
	 {
	   ok=0;
	   for (j=1;j<=nn;j++)
		 {
		   if (c1[i][1]<=prev[j][1])
			 {
			   nr--;
			   prev[j][1]=c1[i][1];
			   ok=1;
			 }
		 }
	   if (!ok)
		 {
		   nn++;
		   prev[nn][0]=c1[i][0];
		   prev[nn][1]=c1[i][1];
		 }
	 }
//cadranul 2
   nn=0;
   for (i=0;i<=n2;i++)
	 {
	   ok=0;
	   for (j=1;j<=nn;j++)
		 {
		   if (c2[i][1]>=prev[j][1])
			 {
			   nr--;
			   prev[j][1]=c2[i][1];
			   ok=1;
			 }
		 }
	   if (!ok)
		 {
		   nn++;
		   prev[nn][0]=c2[i][0];
		   prev[nn][1]=c2[i][1];
		 }
	 }
//cadranul 3
   nn=0;
   for (i=0;i<=n3;i++)
	 {
	   ok=0;
	   for (j=1;j<=nn;j++)
		 {
		   if (c3[i][1]>=prev[j][1])
			 {
			   nr--;
			   prev[j][1]=c3[i][1];
			   ok=1;
			 }
		 }
	   if (!ok)
		 {
		   nn++;
		   prev[nn][0]=c3[i][0];
		   prev[nn][1]=c3[i][1];
		 }
	 }
//cadranul 4
   nn=0;
   for (i=0;i<=n4;i++)
	 {
	   ok=0;
	   for (j=1;j<=nn;j++)
		 {
		   if (c4[i][1]<=prev[j][1])
			 {
			   nr--;
			   prev[j][1]=c4[i][1];
			   ok=1;
			 }
		 }
	   if (!ok)
		 {
		   nn++;
		   prev[nn][0]=c4[i][0];
		   prev[nn][1]=c4[i][1];
		 }
	 }

   fprintf(g,"%ld\n",nr);
   fclose(f);
   fclose(g);
   return 0;
}