Cod sursa(job #1601141)

Utilizator tudorgalatanRoman Tudor tudorgalatan Data 15 februarie 2016 19:20:23
Problema Ghiozdan Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.9 kb
#include <fstream>
#include <algorithm>
#define InFile  "ferma3.in"
#define OutFile "ferma3.out"
#define N 405

using namespace std;

int n, m, nrzones;
char a[N][N],cu;
int  b[N][N], dx[]={-1, 0, 1, 0}, dy[]={0, 1, 0, -1}, d[N*N];
bool c[N*N];
int i, j, k, l, sol, s, v, ma, p;
pair <int,int> soli;

void filll(int x, int y)
{
    int i;
    b[x][y]=nrzones;
    d[nrzones]++;
    for (i=0; i<4; i++)
        if (!b[x+dx[i]][y+dy[i]] && a[x][y]==a[x+dx[i]][y+dy[i]])
            filll (x+dx[i], y+dy[i]);
}

int main()
{
    ifstream fin (InFile);
    ofstream fout (OutFile);
    fin >> v >> n >> m;
    for (i=1; i<=n; i++)
        fin >> a[i] + 1;
    for (i=1; i<=n; i++)
        for (j=1; j<=m; j++)
            if (!b[i][j])
            {
                nrzones++;
                filll (i,j);
                if (ma < d[nrzones])
                    ma = d[nrzones];
            }
    for (i=1; i<=n; i++)
        for (j=1; j<=m; j++)
        {
            char aux = a[i][j];
            for (k=0; k<4; k++)
            {
                a[i][j] = a[i+dx[k]][j+dy[k]];
                for (l=0, s=0; l<4; l++)
                    if (!c[b[i+dx[l]][j+dy[l]]]&&a[i][j] == a[i+dx[l]][j+dy[l]])
                    {
                        c[b[i+dx[l]][j+dy[l]]] = 1;
                        s += d[b[i+dx[l]][j+dy[l]]];
                    }
                if (!c[b[i][j]])
                    s++;
                if (s > sol)
                {
                    sol = s;
                    cu = a[i][j];
                    soli = make_pair (i,j);
                }
                for (l=0; l<4; l++)
                    c[b[i+dx[l]][j+dy[l]]] = 0;
            }
            a[i][j] = aux;
        }
    if (v == 1)
        fout << ma;
    else
    {
        fout << soli.first << ' ' << soli.second;
        fout << '\n';
        fout << cu;
    }
}