Cod sursa(job #544207)

Utilizator Robert29FMI Tilica Robert Robert29 Data 1 martie 2011 10:46:26
Problema SequenceQuery Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.8 kb
#include <stdio.h>
FILE *f=fopen("poarta.in","r");
FILE *g=fopen("poarta.out","w");

int x,y,dx[4]={1,0,-1,0},dy[4]={0,1,0,-1},l,cc,a[101][101],n,m,i,j,t,c[2][10001],viz[101][101],v[10001][2],c2,k,l1,c1,l2,timp[101][101];
void coadas(){
	int p,u,i;
	p=1;u=0;
	for(i=1;i<=t;i++)
	{
		u++;
		c[0][u]=v[i][0];
		c[1][u]=v[i][1];
		viz[v[i][0]][v[i][1]]=1;
	}
	while(p<=u){
		
		for(i=0;i<=3;i++) {
			l=c[0][p]+dx[i];
			cc=c[1][p]+dy[i];
			
				if(a[l][cc]!=1) {
					if(viz[l][cc]==0){
				viz[l][cc]=viz[c[0][p]][c[1][p]];
				u++;
				c[0][u]=l;
				c[1][u]=cc;
				timp[l][cc]=timp[c[0][p]][c[1][p]]+1;
					}
					else
						if(timp[c[0][p]][c[1][p]]+1==timp[l][cc])
			
				viz[l][cc]=(viz[l][cc]+viz[c[0][p]][c[1][p]])%997;
				}
		}
		p++;
	}
				
		
	
}
void coada(int x, int y) {
	int p,u,i,j;
	p=u=1;
	c[0][p]=x;
	c[1][p]=y;
	timp[x][y]=0;
	viz[x][y]=1;
	while(p<=u){
		for(i=0;i<=3;i++) {
			l=c[0][p]+dx[i];
			cc=c[1][p]+dy[i];
			
				if(a[l][cc]!=1) {
					if(viz[l][cc]==0){
				viz[l][cc]=viz[c[0][p]][c[1][p]];
				u++;
				c[0][u]=l;
				c[1][u]=cc;
				timp[l][cc]=timp[c[0][p]][c[1][p]]+1;
				
				if(a[l][cc]==2){
					timp[l2][c2]+=timp[l][cc];
				viz[l2][c2]=(viz[l2][c2]+viz[l][cc])%997;
				return;
					}
						
			}
		else
			
			if(timp[c[0][p]][c[1][p]]+1==timp[l][cc])
			
				viz[l][cc]=(viz[l][cc]+viz[c[0][p]][c[1][p]])%997;
			
			}
			
				
		}
	p++;
	}
}
	int main() {
	fscanf(f,"%d%d%d%d%d%d%d",&n,&m,&k,&l1,&c1,&l2,&c2);
	for(i=1;i<=k;i++) {
		fscanf(f,"%d%d",&x,&y);
		a[x][y]=2;
		t++;
		v[t][0]=x;
		v[t][1]=y;
	}
	for(i=0;i<=n+1;i++)
		a[i][0]=a[i][m+1]=1;
	for(i=1;i<=m+1;i++)
		a[0][i]=a[n+1][i]=1;
	coadas();
	coada(l1,c1);
	
					fprintf(g,"%d\n%d",timp[l2][c2],viz[l2][c2]);
				
	return 0;
}