Cod sursa(job #1289955)

Utilizator felixiPuscasu Felix felixi Data 10 decembrie 2014 17:13:05
Problema A+B Scor 0
Compilator cpp Status done
Runda Lista lui wefgef Marime 1.57 kb
#include <fstream>
#include <string>
#include <algorithm>

using namespace std;

ifstream in("ferma.in");
ofstream out("ferma.out");

const int NMAX = 400;

int dx[]={-1,0,1,0},dy[]={0,1,0,-1}, v[NMAX+3][NMAX+3], ar[NMAX+3][NMAX+3];
int N,M,cerinta, Ar= 0, Rasp1= 0, Rasp2= 0;
string s;

bool OK_1( int x, int y, int nx, int ny ) {
    return ( v[x][y] == v[nx][ny] );
}

bool OK_2( int x, int y ) {
    return (ar[x][y] == -1);
}

void FLOOD_smenos( int x, int y ) {
    ar[x][y] = Ar;
    for( int i= 0;  i<4;  ++i ) {
        int nx= x+dx[i], ny= y+dy[i];
        if( OK_2( nx,ny ) )  FLOOD_smenos( nx,ny );
    }
}

void FLOOD( int x, int y ) {
    ar[x][y] = -1;
    ++Ar;
    for( int i= 0;  i<4;  ++i ) {
        int nx= x+dx[i], ny= y+dy[i];
        if( OK_1(nx,ny) ) FLOOD( x,y, nx, ny );
    }
}

void citire_flood() {
    in >> cerinta >> N >> M;
    for( int i= 1;  i<=N;  ++i ) {
        in >> s;
        for( int j= 1;  j<=M;  ++j ) v[i][j] = s[j-1];
    }
    for( int i= 1;  i<=N;  ++i ) {
        for( int j= 1;  j<=M;  ++j ) {
            if( !ar[i][j] ) {
                Ar= 0;
                FLOOD( i,j );
                FLOOD_smenos( i,j );
                Rasp1= max(Rasp1, Ar);
            }
        }
    }


int main() {
    Citire_flood();
    for( int i= 1;  i<=N;  ++i ) {
        for( int j= 1;  j<=M;  ++j ) {
            int value;
            for( int i= 0;  i<4;  ++i ) {
                int nx= x+dx[i], y= y+dy[i];
                if( v[nx][ny] != 0 ) Rasp2= max( Rasp2, Consider( i,j,v[nx][ny] ) );