Pagini recente » Cod sursa (job #2622087) | Cod sursa (job #2973271) | Cod sursa (job #2403391) | Cod sursa (job #1118866) | Cod sursa (job #1292545)
#include <fstream>
#include <bitset>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
int n,m,p1=1,p2=1,u1,u2,t,ok=1,x,y,xk,yk;
int r[103][103],j[103][103];
bitset<103> viz1[103];
bitset<103> viz2[103];
char w;
int c1[1000003],c2[1000003];
int dx[]={1,1,1,0,0,-1,-1,-1},dy[]={-1,0,1,-1,1,-1,0,1};
int main(){
fin>>n>>m;
fin.get(w);
for(int i=1;i<=n;++i){
for(int k=1;k<=m;++k){
fin.get(w);
if(w=='R'){
viz1[i][k]=1;
r[i][k]=1;
t=i*1000+k;
c1[++u1]=t;
}
if(w=='J'){
viz2[i][k]=1;
j[i][k]=1;
t=i*1000+k;
c2[++u2]=t;
}
if(w=='X'){
viz1[i][k]=viz2[i][k]=1;
}
}
fin.get(w);
}
for(int i=0;i<=n+1;++i){
viz1[i][0]=viz2[i][0]=viz1[i][m+1]=viz2[i][m+1]=1;
}
for(int i=0;i<=m+1;++i){
viz1[0][i]=viz2[0][i]=viz1[n+1][i]=viz2[n+1][i]=1;
}
while(ok){// && p1<=u1 && p2<=u2){
t=c1[p1];
p1++;
x=t/1000;
y=t%1000;
for(int i=0;i<=7;++i){
xk=x+dx[i];
yk=y+dy[i];
if(viz1[xk][yk]==0){
t=1000*xk+yk;
c1[++u1]=t;
viz1[xk][yk]=1;
r[xk][yk]=r[x][y]+1;
}
}
t=c2[p2];
p2++;
x=t/1000;
y=t%1000;
for(int i=0;i<=7 && ok;++i){
//if(ok==1){
xk=x+dx[i];
yk=y+dy[i];
if(viz2[xk][yk]==0){
t=1000*xk+yk;
c2[++u2]=t;
viz2[xk][yk]=1;
j[xk][yk]=j[x][y]+1;
if(j[xk][yk]==r[xk][yk]) ok=0;
}
//for(int i=1;i<=n;++i)
//for(int k=1;k<=m;++k){
// if(j[xk][yk]==r[i][k]) ok=0;
//}
//}
}
}
/*
for(int i=1;i<=n;++i)
{
for(int k=1;k<=m;++k) fout<<r[i][k];
fout<<'\n';
}
fout<<"\n\n";
for(int i=1;i<=n;++i)
{
for(int k=1;k<=m;++k) fout<<j[i][k];
fout<<'\n';
}
fout<<"\n\n";
*/
fout<<j[xk][yk]<<' '<<xk<<' '<<yk<<'\n';
fout.close();
return 0;
}