Cod sursa(job #414113)

Utilizator nandoLicker Nandor nando Data 9 martie 2010 18:49:36
Problema Iepuri Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.18 kb
#include <cstdio>

char mat[250][250];
int cp[2][50][2],cv=0,t,nw=0,n,m,bp=0,d=0,mv=0,mt,h;

int dir[5][2]={{0,0},{-1,0},{0,-1},{1,0},{0,1}};

void swap(){
	for(int i=0;i<nw;i++){
		mat[cp[0][i][0]][cp[0][i][1]]=(cv==0)?0:8;
	}
	for(int i=0;i<t;i++){
		mat[cp[1][i][0]][cp[1][i][1]]=(cv==0)?8:0;
	}
	cv=(cv+1)%2;
}
bool onMap(int&x,int& y){
	if(x<1||x>n||y<1||y>m){
		return false;
	}else{
		return true;
	}
}
bool onBomb(int x,int y){
	if(mat[x][y]==6||mat[x][y]==10){
		return true;
	}else{
		for(int i=0;i<=4;i++){
			if(0<x+dir[i][0]&&x+dir[i][0]<=n&&0<y+dir[i][1]&&y+dir[i][1]<=m){
				if(mat[x+dir[i][0]][y+dir[i][1]]==6){
					mat[x+dir[i][0]][y+dir[i][1]]=10;
				}else if(mat[x+dir[i][0]][y+dir[i][1]]==10){
					return true;
				}
			}
		}
	}
	return false;
}
int onArrow(int x,int y){
	if(1<=mat[x][y]&&mat[x][y]<=4){
		return mat[x][y];
	}else{
		return 0;
	}
}
void switchdir(int& dir){
	if(dir==1){
		dir=3;
	}else if(dir==2){
		dir=4;
	}else if(dir==3){
		dir=1;
	}else{
		dir=2;
	}
}
int main(){
	FILE* fin=fopen("iepuras.in","r");
	FILE* fout=fopen("iepuras.out","w");
	int x,y,tmp;
	fscanf(fin,"%u %u\n%u %u %u",&n,&m,&x,&y,&h);
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			fscanf(fin,"%u",&tmp);
			if(tmp==8){
				cp[0][nw][0]=i,cp[0][nw][1]=j;
				nw++;
			}else if(tmp==7){
				mt++;
			}
			mat[i][j]=tmp;
		}
	}
	fscanf(fin,"%u",&t);
	for(int i=0;i<t;i++){
		fscanf(fin,"%u %u",&cp[1][i][0],&cp[1][i][1]);
	}
	while(true){
		x+=dir[h][0];
		y+=dir[h][1];
		d++;
		if(!onMap(x,y)){
			fprintf(fout,"RATACIT\n");
			fprintf(fout,"%u %u\n%u %u\n",x-dir[h][0],y-dir[h][1],mv,d);
			break;
		}
		if(mat[x][y]==7){
			mv++,mat[x][y]=0;
		}
		if(onBomb(x,y)){
			fprintf(fout,"INGERAS\n");
			fprintf(fout,"%u %u\n%u %u\n",x,y,mv,d);
			break;
		}
		if(mv==mt&&mt!=0){
			fprintf(fout,"FERICIT\n");
			fprintf(fout,"%u %u\n%u %u\n",x,y,mv,d);
			break;
		}
		if(mat[x][y]==9){
			swap();
		}
		if(1<=mat[x][y]&&mat[x][y]<=4){
			h=mat[x][y],mat[x][y]=0;
		}
		if(mat[x+dir[h][0]][y+dir[h][1]]==8||mat[x+dir[h][0]][y+dir[h][1]]==5){
			switchdir(h);
		}
	}
	fclose(fin);
	fclose(fout);
	return 0;
}