Cod sursa(job #1087720)

Utilizator vladinfoVlad Stefanescu vladinfo Data 19 ianuarie 2014 19:31:49
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 3.74 kb
#include<cstdio>
using namespace std;
int v[100][100],q[10000][2],r[4][2];
int main(){
    FILE *in=fopen("rj.in","r"),*out=fopen("rj.out","w");
    int n,e,p=0,m,u=1;
    char c;
    fscanf(in,"%d%d\n",&n,&m);
    for(int i=1;i<n+1;i++){
        for(int j=1;j<m+1;j++){
            fscanf(in,"%c",&c);
            switch(c){
                case 'X':
                    v[i][j]=-1;
                    break;
                case ' ':
                    v[i][j]=0;
                    break;
                case 'J':
                    v[i][j]=1;
                    q[0][1]=j;
                    q[0][0]=i;
                    break;
                case 'R':
                    r[0][1]=j;
                    r[0][0]=i;
                    break;
                case '\n':
                    v[i][j]=0;
                    break;
            }
        }
        fscanf(in,"\n");
    }
    for(int i=0;i<=n;i++){
        v[i][0]=v[i][n+1]=-1;
    }
    for(int i=0;i<=m;i++){
        v[0][i]=v[m+1][i]=-1;
    }
    int i,j;
    do{
        i=q[p][0];
        j=q[p][1];
        e=v[i][j]+1;
        if(v[i+1][j]==0){
            q[u][0]=i+1;
            q[u][1]=j;
            u++;
            v[i+1][j]=e;
        }
        if(v[i][j+1]==0){
            q[u][0]=i;
            q[u][1]=j+1;
            u++;
            v[i][j+1]=e;
        }
        if(v[i-1][j]==0){
            q[u][0]=i-1;
            q[u][1]=j;
            u++;
            v[i-1][j]=e;
        }
        if(v[i][j-1]==0){
            q[u][0]=i;
            q[u][1]=j-1;
            u++;
            v[i][j-1]=e;
        }
        if(v[i+1][j+1]==0){
            q[u][0]=i+1;
            q[u][1]=j+1;
            u++;
            v[i+1][j+1]=e;
        }
        if(v[i+1][j-1]==0){
            q[u][0]=i+1;
            q[u][1]=j-1;
            u++;
            v[i+1][j-1]=e;
        }
        if(v[i-1][j+1]==0){
            q[u][0]=i-1;
            q[u][1]=j+1;
            u++;
            v[i-1][j+1]=e;
        }
        if(v[i-1][j-1]==0){
            q[u][0]=i-1;
            q[u][1]=j-1;
            u++;
            v[i-1][j-1]=e;
        }
        p++;
    }
    while(p<u);
    fprintf(out,"%d",(v[r[0][0]][r[0][1]]+1)/2);
    u=1;
    p=0;
    i=r[v[r[0][0]][r[0][1]]][0];
    j=r[v[r[0][0]][r[0][1]]][1];
    for(int a=v[r[0][0]][r[0][1]];a>0;a--){
        if(v[i+1][j]==a){
            q[u][0]=i+1;
            q[u][1]=j;
            u++;
            i++;
        }
        else if(v[i][j+1]==a){
            q[u][0]=i;
            q[u][1]=j+1;
            u++;
            j++;
        }
        else if(v[i-1][j]==a){
            q[u][0]=i-1;
            q[u][1]=j;
            u++;
            i--;
        }
        else if(v[i][j-1]==a){
            q[u][0]=i;
            q[u][1]=j-1;
            u++;
            j--;
        }
        else if(v[i+1][j+1]==a){
            q[u][0]=i+1;
            q[u][1]=j+1;
            u++;
            i++;j++;
        }
        else if(v[i+1][j-1]==a){
            q[u][0]=i+1;
            q[u][1]=j-1;
            u++;
            i++;j--;
        }
        else if(v[i-1][j+1]==a){
            q[u][0]=i-1;
            q[u][1]=j+1;
            u++;
            i--;j++;
        }
        else if(v[i-1][j-1]==a){
            q[u][0]=i-1;
            q[u][1]=j-1;
            u++;
            i--;j--;
        }
        p++;
    }
    if(u%2==1){
        if(q[u/2][1]>q[u/2+1][1]){
            fprintf(out," %d %d",q[u/2+1][0],q[u/2+1][1]);
        }
        else{
            fprintf(out," %d %d",q[u/2][0],q[u/2][1]);
        }
    }
    else{
        fprintf(out," %d %d",q[u/2][0],q[u/2][1]);
    }
    return 0;
}