Cod sursa(job #197611)

Utilizator raduzerRadu Zernoveanu raduzer Data 5 iulie 2008 12:10:41
Problema Gropi Scor 50
Compilator cpp Status done
Runda Junior Challenge 2008 Marime 1.18 kb
#include <stdio.h>

int n,m,p,i,j,a[3][10000],b[30000],c[30000],x[100010],y[100010],sx[100010],sy[100010],fx[100010],fy[100010];

int main()
{
	freopen("gropi.in","r",stdin);
	freopen("gropi.out","w",stdout);
	scanf("%d%d",&p,&n);
	for (i=1; i<=n; ++i) { scanf("%d%d",&x[i],&y[i]); a[x[i]][y[i]]=2000000000; }
	scanf("%d",&m);
	for (i=1; i<=m; ++i) scanf("%d%d%d%d",&sx[i],&sy[i],&fx[i],&fy[i]);
	for (i=1; i<=m; ++i)
	{
		b[0]=1;
		b[1]=sx[i];
		c[1]=sy[i];
		a[b[1]][c[1]]=1;
		for (j=1; j<=b[0]; ++j)
		{
			if (b[j]+1<3 && a[b[j]+1][c[j]]==0)
			{
				b[++b[0]]=b[j]+1;
				c[b[0]]=c[j];
				a[b[j]+1][c[j]]=a[b[j]][c[j]]+1;
			}
			if (c[j]+1<=p && a[b[j]][c[j]+1]==0)
			{
				b[++b[0]]=b[j];
				c[b[0]]=c[j]+1;
				a[b[j]][c[j]+1]=a[b[j]][c[j]]+1;
			}
			if (b[j]-1>0 && a[b[j]-1][c[j]]==0)
			{
				b[++b[0]]=b[j]-1;
				c[b[0]]=c[j];
				a[b[j]-1][c[j]]=a[b[j]][c[j]]+1;
			}
			if (c[j]-1>0 && a[b[j]][c[j]-1]==0)
			{
				b[++b[0]]=b[j];
				c[b[0]]=c[j]-1;
				a[b[j]][c[j]-1]=a[b[j]][c[j]]+1;
			}
		}
		printf("%d\n",a[fx[i]][fy[i]]);
		for (j=1; j<=p; ++j) { if (a[1][j]<2000000000) a[1][j]=0; if (a[2][j]<2000000000) a[2][j]=0; }
	}
	return 0;
}