Cod sursa(job #834241)

Utilizator ShaDoWsiD100Rzv Rzv ShaDoWsiD100 Data 13 decembrie 2012 23:58:12
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.68 kb
#include<fstream>
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
int dx[8]={-1,-1,-1,0,0,1,1,1},dy[8]={-1,0,1,-1,1,-1,0,1};
struct co{
	int l,c;}c1[500],c2[500];
int a[101][101],x,xx,y,yy,i,j;
char A;
int main(){
	int n,m,p1=1,p2=1,u1=1,u2=1,intalnit=1,cu2;
	f>>n>>m;
	f.get();
	for(i=1;i<=n;i++){
		for(j=1;j<=m;j++){
		    f.get(A);
			if(A=='R'){
			    a[i][j]=0;
			    c1[1].l=i;
			    c1[1].c=j;}
			if(A=='J'){
				a[i][j]=0;
				c2[1].l=i;
				c2[1].c=j;}
			if(A==' ')
				a[i][j]=100000;
			if(A=='X')
				a[i][j]=99999;}
		f.get();}
	for(i=0;i<=n+1;i++)
        a[0][i]=a[n+1][i]=99999;
    for(j=0;j<=m+1;j++)
        a[j][0]=a[j][m+1]=99999;
    if(c1[1].l>c2[1].l || c1[1].l==c1[1].l && c1[1].c>c2[1].c){
		while(intalnit==1){
			int cu1=u1;
			cu2=u2;
			while(p1<=cu1){
			    x=c1[p1].l;
			    y=c1[p1].c;
			    for(i=0;i<=7;i++){
			        if(a[x+dx[i]][y+dy[i]]==100000){
			       	u1++;
			   	    c1[u1].l=x+dx[i];
			   	    c1[u1].c=y+dy[i];
			   	    a[x+dx[i]][y+dy[i]]=a[x][y]+1;}
			        if(a[x+dx[i]][y+dy[i]]<0){
			        	intalnit=0;
			        	g<<-a[x+dx[i]][y+dy[i]]+1<<" "<<x+dx[i]<<" "<<y+dy[i];
					    i=8;}}
			        p1++;}}
			    if(intalnit==1){
					while(p2<=cu2){
				    xx=c2[p2].l;
		    	    yy=c2[p2].c;
				    for(i=0;i<=7;i++){
				        if(a[xx+dx[i]][yy+dy[i]]==100000){
					        u2++;
					        c2[u2].l=xx+dx[i];
					        c2[u2].c=yy+dy[i];
					        a[xx+dx[i]][yy+dy[i]]=a[xx][yy]-1;}
				        if(a[xx+dx[i]][yy+dy[i]]>0 && a[xx+dx[i]][yy+dy[i]]!=99999){
					        intalnit=0;
					        g<<a[xx+dx[i]][yy+dy[i]]+1<<" "<<xx+dx[i]<<" "<<yy+dy[i];
						    i=8;}}
			        p2++;}}}
		else
			while(intalnit==1){
				int cu1=u1;
				int cu2=u2;
				while(p2<=cu2){
				    xx=c2[p2].l;
		    	    yy=c2[p2].c;
				    for(i=0;i<=7;i++){
				        if(a[xx+dx[i]][yy+dy[i]]==100000){
					        u2++;
					        c2[u2].l=xx+dx[i];
					        c2[u2].c=yy+dy[i];
					        a[xx+dx[i]][yy+dy[i]]=a[xx][yy]-1;}
				        if(a[xx+dx[i]][yy+dy[i]]>0 && a[xx+dx[i]][yy+dy[i]]!=99999){
					        intalnit=0;
					        g<<a[xx+dx[i]][yy+dy[i]]+1<<" "<<xx+dx[i]<<" "<<yy+dy[i];
						    i=8;}}
			        p2++;}
				if(intalnit==1){
				while(p1<=cu1){
					x=c1[p1].l;
					y=c1[p1].c;
				for(i=0;i<=7;i++){
				    if(a[x+dx[i]][y+dy[i]]==100000){
				    	u1++;
				    	c1[u1].l=x+dx[i];
				    	c1[u1].c=y+dy[i];
				    	a[x+dx[i]][y+dy[i]]=a[x][y]+1;}
				    if(a[x+dx[i]][y+dy[i]]<0){
				    	intalnit=0;
				    	g<<-a[x+dx[i]][y+dy[i]]+1<<" "<<x+dx[i]<<" "<<y+dy[i];
					    i=8;}}
			    p1++;}}}
	return 0;}