Cod sursa(job #1533539)

Utilizator din99danyMatei Daniel din99dany Data 22 noiembrie 2015 18:02:47
Problema Ferma Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 3.04 kb
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;

char q[450][450];
int v[450][450];
bool ver[450][450];

int arie, x[450*450];
char r[450];

const int x_a[4] = { -1, 1, 0, 0 };
const int y_a[4] = { 0, 0, -1, 1 };

char cha;


int ver_egal( int xx, int yy ){

    int asd[50];

    int s, i, j, d, ok,  x_aa, y_aa, xx_aa, yy_aa, maxs;
    d = 0;

    maxs = 0;
    for( i = 0; i <= 3; ++i ){
        x_aa = xx + x_a[i];
        y_aa = yy + y_a[i];

        s = x[v[x_aa][y_aa]];
        //printf("%d>>\n",s);
        d = 0;

        for( int t = 1; t <= 30; ++t ) asd[t] = 0;

        for( j = 0 ; j <= 3; ++j ){
            xx_aa = xx + x_a[j];
            yy_aa = yy + y_a[j];
            if( q[xx_aa][yy_aa] == q[x_aa][y_aa] && i != j && v[xx_aa][yy_aa] != v[x_aa][y_aa]  ){
                ok = 1;

                for( int t = 1; t <= d; ++t ){
                    if( v[xx_aa][yy_aa] == asd[t] ) ok = 0;
                }

                if( ok ) s += x[v[xx_aa][yy_aa]];

                d++;
                asd[d] = v[xx_aa][yy_aa];

            }
        }

        if( q[x_aa][y_aa] != q[xx][yy] ) s++;
        if( s > maxs ){
            maxs = s;
            cha = q[x_aa][y_aa];
        }

        //  printf("%d\n",maxs);
    }

    return maxs;

}

void fil( int xx, int yy, char qrt, int c ){

    int i, j, x_aa, y_aa;

    ver[xx][yy] = true;
    v[xx][yy] = c;
    arie ++;

    for( i = 0; i <= 3; ++i ){
        x_aa = xx + x_a[i];
        y_aa = yy + y_a[i];
        if( !ver[x_aa][y_aa] && q[x_aa][y_aa] == qrt ) fil( x_aa, y_aa, qrt, c );
    }

}

int main()
{
    freopen("ferma3.in","r",stdin);
    freopen("ferma3.out","w",stdout);


    int n, m, i, j, s, t, d, c, k, ma, col, cord1, cord2, aire_max;
    char caracter;
    aire_max = 0;
    cord1 = cord2 = 0;

    scanf("%d",&c);
    scanf("%d%d%*c",&n,&m);

    for( i = 1; i <= n; ++i ){
        scanf("%s",r);
        t = strlen(r);
        for( j = 0; j < t; ++j )
            q[i][j+1] = r[j];
    }

    t = 0;
    for( i = 1; i <= n; ++i ){
        for( j = 1; j <= m; ++j ){
            if( !ver[i][j] ){
                t++;
                arie = 0;
                fil( i, j, q[i][j], t );
                x[t] = arie;
                if( arie > aire_max ) aire_max = arie;
                //printf("%d>>\n",arie);
            }
        }
    }

    /*
    for( i = 1; i <= n; ++i ){
        for( j = 1; j <= m; ++j ) printf("%d ",v[i][j]);
        printf("\n");
    }
    */

    ma = 0;
    if( c == 1 ) printf("%d",aire_max);
    else{
        for( i = 1; i <= n; ++i ){
            for( j = 1; j <= m; ++j ){
                d = ver_egal(i,j);
                if( d > ma ){
                    ma = d;
                    cord1 = i;
                    cord2 = j;
                    caracter = cha;
                }
            }
        }
        //printf("%d\n",ma);
        printf("%d %d\n%c",cord1,cord2,caracter);
    }

    return 0;

}