Cod sursa(job #2031610)

Utilizator maria15Maria Dinca maria15 Data 3 octombrie 2017 16:37:14
Problema A+B Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.51 kb
#include <fstream>

using namespace std;

ifstream fin("spirala.in");
ofstream fout("spirala.out");

short n, m, v[101][101], x, a[100*100+2], b[100*100+2], i, u, j, dif;
short f[101][101];

void rec(int x){
    if(f[x][x] == 0){
        if(x!=1)
            if(v[x][x+1] - v[x][x] != dif && x!= n-x+1){
                fout<<"NU\n"<<v[x][x]<<" "<<v[x+1][x];
                return;
            }
            else
                f[x][x] = 1, f[x][x+1] = 1, a[++u] = v[x][x], a[++u] = v[x][x+1];
        if(x==1)
            f[1][1] = 1, f[1][2] = 1;

        for(short j=x+2;j<=m-x+1;j++)
            if(v[x][j] - v[x][j-1] != dif){
                fout<<"NU\n"<<v[x][j-1]<<" "<<v[x][j];
                return;
            }
            else
                f[x][j] = 1, a[++u] = v[x][j];
        if(v[x+1][m-x+1] - v[x][m-x+1] != dif && x!=m-x+1){
            fout<<"NU\n"<<v[x][m-x+1]<<" "<<v[x+1][m-x+1];
            return;
        }
        else
            f[x+1][m-x+1] = 1, a[++u] = v[x+1][m-x+1];

        for(short i=x+2;i<=n-x+1;i++)
            if(v[i][m-x+1] - v[i-1][m-x+1] != dif && x!=m-x+1){
                fout<<"NU\n"<<v[i-1][m-x+1]<<" "<<v[i][m-x+1];
                return;
            }
            else
                f[i][m-x+1] = 1, a[++u] = v[i][m-x+1];
        if(v[n-x+1][m-x] - v[n-x+1][m-x+1] != dif){
            fout<<"NU\n"<<v[n-x+1][m-x+1]<<" "<<v[n-x+1][m-x];
            return;
        }
        else
            f[n-x+1][m-x] = 1, a[++u] = v[n-x+1][m-x];

        for(short j=m-x-1;j>=x && j<=m;j--)
            if(v[n-x+1][j] - v[n-x+1][j+1] != dif){
                fout<<"NU\n"<<v[n-x+1][j+1]<<" "<<v[n-x+1][j];
                return;
            }
            else
                f[n-x+1][j] = 1, a[++u] = v[n-x+1][j];

        if(v[n-x][x] - v[n-x+1][x] != dif){
            fout<<"NU\n"<<v[n-x+1][x]<<" "<<v[n-x][x];
            return;
        }
        else
            f[n-x][x] = 1, a[++u] = v[n-x][x];

        for(short i=n-x+2; i>x && i<=n; i--)
            if(v[i][x] - v[i+1][x] != dif){
                fout<<"NU\n"<<v[i+1][x]<<" "<<v[i][x];
                return;
            }
            else
                f[i][x] = 1, a[++u] = v[i][x];
        rec(x+1);
    }
    else
        return;

}

int main(){
    fin>>n>>m;
    for(i=1;i<=n;i++)
        for(j=1;j<=m;j++)
            fin>>v[i][j];
    u=2;
    a[1] = v[1][1];
    a[2] = v[1][2];

    dif = v[1][2] - v[1][1];
    rec(1);
    fout<<a[u];
    return 0;
}