Cod sursa(job #197669)

Utilizator silvia_the_bestSilvia Pripoae silvia_the_best Data 5 iulie 2008 13:46:41
Problema Gropi Scor 0
Compilator cpp Status done
Runda Junior Challenge 2008 Marime 1.26 kb
#include <cstdio>
int c,n,v[2][20000002],m,x1,x2,y1,y2,cordi,cordj,ok,km;
int groapa(int d){
	if (d==1){
		if (v[cordi][cordj+1]==1){
			cordi=(cordi+1)%2;
			++km;
		}
		else if ((cordi+1)%2==x2&&(cordj==y2)){
			++km;
			return 0;
		}
		else{
			++cordj;
		}
	}		
	else if (d==2){
		if (v[(cordi+1)%2][cordj]==1){
			if (x1<x2){
				d=1;
				++cordj;
			}
			else{
				d=3;
				--cordj;
			}
			++km;
		}
		else if (((cordj+1==y2)||(cordj-1==y2))&&(cordi==x2)){
			++km;
			return 0;
		}
	}
	if (d==3){
		if (v[cordi][cordj-1]==1){
			cordi=(cordi+1)%2;
			++km;
		}
		else if ((cordi+1)%2==x2&&(cordj==y2)){
			++km;
			return 0;
		}
		else
			--cordj;
	}	
	return 1;
}
void write(int i){
	printf("%d",&i);
}
int solve(){
	int d,km=0;
	cordi=x1;
	cordj=y1;
	ok=1;
	if (y1<y2)
		d=1;
	else
		d=3;
	if (x1==x2&&y1==y2)
		return 0;
	while (ok){
		ok=groapa(d);	
	}
	return km;
}
void read(){
	int i,j,k;
	freopen("gropi.in","r",stdin);
	freopen("gropi.out","w",stdout);
	scanf("%d%d",&c,&n);
	for (i=1;i<=n;++i){
		scanf("%d%d",&j,&k);
		v[j][k]=1;
	}
	scanf("%d",&m);
	for (i=1;i<=m;++i){
		scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
		write(solve());
	}
}
int main(){
	read();
	//solve();
	//write();
	return 0;
}