Cod sursa(job #203192)

Utilizator jeanFMI - Petcu Ion Cristian jean Data 14 august 2008 14:39:27
Problema Gropi Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.39 kb
#include<fstream.h>

int col,gropi,m,t,k,i,pasi,l1,l2,c1,c2;

struct sir {int x,y;};

sir v[100010],aux;

void pozitie (int li, int  ls, int  &k)

 { int i,j,di,dj,aux2;

  i=li; j=ls; di=0; dj=1;

  while(i<j)

   {if(v[i].y>v[j].y) { aux=v[i]; v[i]=v[j]; v[j]=aux;

			aux2=di; di=dj; dj=aux2;}

    i=i+di;
    j=j-dj;
   }

   k=i;
 }

void quick ( int li , int ls)

 {
  if(li<ls)

     { pozitie(li,ls,k);

       quick(li,k-1);

       quick(k+1,ls);
     }
 }

int main()

{

ifstream f("gropi.in");
ofstream g("gropi.out");

f>>col>>gropi;

for(i=1;i<=gropi;i++)

 f>>v[i].x>>v[i].y;

quick(1,gropi);


f>>m;

 for(t=1;t<=m;t++)


    {  f>>l1>>c1>>l2>>c2;  pasi=1;


	if(c1<c2)

	 {  i=1;

	   while(c1!=c2)

	     {while(l1!=v[i].x&&i<=gropi&&v[i].y<c2) i++;

	       if(i>gropi||v[i].y>c2) {pasi=pasi+c2-c1; c1=c2;}

		else { pasi=pasi+v[i].y-c1;  c1=v[i].y-1;

				    if(l1==1) l1=2;
					 else l1=1;
		     }

	      }
	   if(l1!=l2) pasi++;
	}

	else

	 { i=gropi;

	   while(c1!=c2)

	     {while(l1!=v[i].x&&i>0&&v[i].y>c2) i--;

	       if(i<1||v[i].y<c2) {pasi=pasi+c1-c2; c1=c2;}

		else { pasi=pasi+c1-v[i].y;  c1=v[i].y+1;

				    if(l1==1) l1=2;
					 else l1=1;
		     }

	      }
	   if(l1!=l2) pasi++;
	}
      g<<pasi<<'\n';

     }

f.close();
g.close();
return 0;
}