Cod sursa(job #145912)

Utilizator RobytzzaIonescu Robert Marius Robytzza Data 29 februarie 2008 18:32:52
Problema Ciurul lui Eratosthenes Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 2.08 kb
#include <stdio.h>
# define MAX 1010
struct stru
{
    int minx,miny;
    int maxx,maxy;
};
int a[MAX][MAX],n,x1[MAX*MAX],y1[MAX*MAX];
long nr=0;
stru l[MAX*MAX],c[MAX*MAX];

void citire()
{
   int nb;
   freopen ("puncte.in","r",stdin);
   scanf ("%d",&nb);
   int x,y;
   for (int i=0;i<nb;i++)
   {
      scanf ("%d%d",&x,&y);
      a[++x][++y]=1;
      if (x>n)
	n=x;
	if (y>n)
	  n=y;
      x1[nr]=x;
      y1[nr]=y;
      nr++;
   /*   if (l[x].maxx==0)
      {
	 l[x].maxx=x;
	 l[x].maxy=y;
      }
      else
	if (l[x].maxy<y)
	   l[x].maxy=y;



      if (l[x].minx==0)
      {
	 l[x].maxx=x;
	 l[x].maxy=y;
      }
      else
	if (l[x].miny>y)
	   l[x].miny=y;

     if (l[x].maxy==0)
      {
	 l[x].maxx=x;
	 l[x].maxy=y;
      }
      else
	if (l[x].maxx<x)
	   l[x].maxx=x;



      if (l[x].miny==0)
      {
	 l[x].maxy=y;
	 l[x].maxx=x;
      }
      else
	if (l[x].minx>x)
	   l[x].minx=x;
    */
   }
   fclose(stdin);
}

void vasile()
{
  int x,y,x2,y2;
   for (int i=0;i<nr;i++)
   {
      x=x1[i];
      y=y1[i];
      x2=1;
      y2=y;

      while (a[x2][y2]==0 && x2<x)
	   x2++;

      while (x2<x)
      {
	  if(a[x2][y2]==0)
	  {
	    a[x2][y2]=1;
	    x1[nr]=x2;
	    y1[nr]=y2;
	    nr++;
	  }
	  x2++;
      }


      x2=x;
      y2=n;
      while (a[x2][y2]==0 && y2>y)
	 y2--;

      while (y2>y)
      {
	 if (a[x2][y2]==0)
	 {
	   a[x2][y2]=1;
	   x1[nr]=x2;
	   y1[nr]=y2;
	   nr++;
	 }
	 y2--;
      }


      x2=n;
      y2=y;
      while (a[x2][y2]==0 && x2>x)
	x2--;

      while (x2>x)
      {
	if (a[x2][y2]==0)
	{
	  a[x2][y2]=1;
	  x1[nr]=x2;
	  y1[nr]=y2;
	  nr++;
	}
	x2--;
      }

      x2=x;
      y2=1;
      while (a[x2][y2]==0 && y2<y)
	 y2++;

      while (y2<y)
      {
	 if (a[x2][y2]==0)
	 {
	   a[x2][y2]=1;
	   x1[nr]=x2;
	   y1[nr]=y2;
	   nr++;
	 }
	 y2++;
      }


   }
}

int main ()
{
  citire();
  vasile();
  freopen ("puncte.out","w",stdout);
  printf ("%ld\n",nr);
  fclose(stdout);
  return 0;
}