Cod sursa(job #1649426)

Utilizator Tudor_CandeaCandea Tudor Tudor_Candea Data 11 martie 2016 13:37:45
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 10.99 kb
#include <fstream>
#include <queue>
using namespace std;
ifstream fin ("ferma3.in");
ofstream fout ("ferma3.out");

struct ferma
{
    char c;
    int n;
} f[455][455];

queue <int> qx,qy;
int a[160010];
void fil(int i, int j, int&ct1, char t, int nr, int n3, int m1)
{
    /*if(i==87 && j==58)
        int stop=1;
    */queue <int> qx1, qy1;

    int ct=0;
    if(f[i][j].n==m1*n3+1)
       {
           f[i][j].n=nr;
       }
    else
        {
            ct1=0;
             return;
        }

    qx1.push(i);
    qy1.push(j);
    ct1=1;
    while(!qx1.empty())
    {
        ct=0;
        int xc=qx1.front();
        qx1.pop();
        int yc=qy1.front();
        qy1.pop();

        int xv=xc;
        int yv=yc+1;
        if(f[xv][yv].c==t && f[xv][yv].n!=nr)
        {
            ct1++;
            f[xv][yv].n=nr;
            qx1.push(xv);
            qy1.push(yv);

        }
        if(f[xv][yv].c!=t)
                ct++;

        xv=xc;
        yv=yc-1;
        if(f[xv][yv].c==t && f[xv][yv].n!=nr)
        {
            //ct++;
            ct1++;
            f[xv][yv].n=nr;
            qx1.push(xv);
            qy1.push(yv);

        }
        if(f[xv][yv].c!=t)
                ct++;

        xv=xc+1;
        yv=yc;
        if(f[xv][yv].c==t && f[xv][yv].n!=nr)
        {
            //ct++;
            ct1++;
            f[xv][yv].n=nr;
            qx1.push(xv);
            qy1.push(yv);

        }
        if(f[xv][yv].c!=t)
                ct++;

        xv=xc-1;
        yv=yc;
        if(f[xv][yv].c==t && f[xv][yv].n!=nr)
        {
            //ct++;
            ct1++;
            f[xv][yv].n=nr;
            qx1.push(xv);
            qy1.push(yv);

        }
        if(f[xv][yv].c!=t)
                ct++;
        if(ct>1)
        {
            qx.push(xc);
            qy.push(yc);
        }
    }
    a[nr]=ct1;
}


int main()
{
    int m, n3, v, s, n1=0, x, y, m1, n4;

    char t;
    fin>>v>>n3>>m;
    for(int i=1; i<=n3; i++)
        for(int j=1; j<=m; j++)
        {
            fin>>f[i][j].c;
            f[i][j].n=m*n3+1;
        }
    m1=m;
    n4=n3;
    int nr=1;
    s=0;
    for(int i=1; i<=n3; i++)
        for(int j=1; j<=m; j++)
        {
            /* lee(i,j,x,n3,m);
             s=x;
             */t=f[i][j].c;

            fil(i,j,s,t,nr,n3,m);
            if(s)
            if(s!=0)
                nr++;
            if(n1<s)
                n1=s;
        }

  /*  for(int i=1; i<=n3; i++)
    {
        for(int j=1; j<=m; j++)
        {
            fout<<f[i][j].n<<' ';
        }
        fout<<'\n';
    }


    for(int i=1; i<=nr+1; i++)
        fout<< a[i]<<' ';

    while(!qx.empty())
    {
        fout<<qx.front()<<' '<<qy.front();
        fout<<'\n';
        qx.pop();
        qy.pop();
    }
*/
    if(v==1)
        fout<<n1<<'\n';
    else
       {
           int n2=0;
           while(!qx.empty())
           {
               int i=qx.front();
               qx.pop();
               int j=qy.front();
               qy.pop();

               if(f[i][j+1].c==f[i][j-1].c)
                       if(f[i][j+1].c!=f[i][j].c)
                       {
                            if(f[i][j+1].n==f[i][j-1].n)
                                s=a[f[i][j-1].n]+1;
                            else
                                s=a[f[i][j+1].n]+a[f[i][j-1].n]+1;
                            if(n2<s)
                            {
                                n2=s;
                                n3=i;
                                m=j;
                                t=f[i][j+1].c;
                            }
                       }

                   if(f[i+1][j].c==f[i-1][j].c)
                       if(f[i+1][j].c!=f[i][j].c)
                       {
                           if(f[i+1][j].n==f[i-1][j].n)
                            s=a[f[i+1][j].n]+1;
                           else
                            s=a[f[i+1][j].n]+a[f[i-1][j].n]+1;
                           if(n2<s)
                           {
                               n2=s;
                               n3=i;
                               m=j;
                               t=f[i+1][j].c;
                           }
                       }

                   if(f[i][j+1].c==f[i+1][j].c)
                       if(f[i][j+1].c!=f[i][j].c)
                       {
                           if(f[i][j+1].n==f[i+1][j].n)
                            s=a[f[i+1][j].n]+1;
                           else
                            s=a[f[i][j+1].n]+a[f[i+1][j].n]+1;
                           if(n2<s)
                           {
                               n2=s;
                               n3=i;
                               m=j;
                               t=f[i][j+1].c;
                           }
                       }

                   if(f[i][j+1].c==f[i-1][j].c)
                       if(f[i][j+1].c!=f[i][j].c)
                       {
                           if(f[i][j+1].n==f[i-1][j].n)
                            s=a[f[i][j+1].n]+1;
                           else
                            s=a[f[i][j+1].n]+a[f[i-1][j].n]+1;
                           if(n2<s)
                           {
                               n2=s;
                               n3=i;
                               m=j;
                               t=f[i][j+1].c;
                           }
                       }

                   if(f[i+1][j].c==f[i][j+1].c)
                       if(f[i+1][j].c!=f[i][j].c)
                       {
                           if(f[i+1][j].n==f[i][j+1].n)
                            s=a[f[i+1][j].n]+1;
                           else
                           s=a[f[i+1][j].n]+a[f[i][j+1].n]+1;
                           if(n2<s)
                           {
                               n2=s;
                               n3=i;
                               m=j;
                               t=f[i+1][j].c;
                           }
                       }
                   if(f[i+1][j].c==f[i][j-1].c)
                       if(f[i+1][j].c!=f[i][j].c)
                       {
                           if(f[i+1][j].n==f[i][j-1].n)
                           s=a[f[i+1][j].n]+1;
                           else
                           s=a[f[i+1][j].n]+a[f[i][j-1].n]+1;
                           if(n2<s)
                           {
                               n2=s;
                               n3=i;
                               m=j;
                               t=f[i+1][j].c;
                           }
                       }
           }





    /*       int n2=0;
           for(int i=1;i<=n4;i++)
               for(int j=1;j<=m1;j++)
               {
                   if(f[i][j+1].c==f[i][j-1].c)
                       if(f[i][j+1].c!=f[i][j].c)
                       {
                            if(f[i][j+1].n==f[i][j-1].n)
                                s=a[f[i][j-1].n]+1;
                            else
                                s=a[f[i][j+1].n]+a[f[i][j-1].n]+1;
                            if(n2<s)
                            {
                                n2=s;
                                n3=i;
                                m=j;
                                t=f[i][j+1].c;
                            }
                       }

                   if(f[i+1][j].c==f[i-1][j].c)
                       if(f[i+1][j].c!=f[i][j].c)
                       {
                           if(f[i+1][j].n==f[i-1][j].n)
                            s=a[f[i+1][j].n]+1;
                           else
                            s=a[f[i+1][j].n]+a[f[i-1][j].n]+1;
                           if(n2<s)
                           {
                               n2=s;
                               n3=i;
                               m=j;
                               t=f[i+1][j].c;
                           }
                       }

                   if(f[i][j+1].c==f[i+1][j].c)
                       if(f[i][j+1].c!=f[i][j].c)
                       {
                           if(f[i][j+1].n==f[i+1][j].n)
                            s=a[f[i+1][j].n]+1;
                           else
                            s=a[f[i][j+1].n]+a[f[i+1][j].n]+1;
                           if(n2<s)
                           {
                               n2=s;
                               n3=i;
                               m=j;
                               t=f[i][j+1].c;
                           }
                       }

                   if(f[i][j+1].c==f[i-1][j].c)
                       if(f[i][j+1].c!=f[i][j].c)
                       {
                           if(f[i][j+1].n==f[i-1][j].n)
                            s=a[f[i][j+1].n]+1;
                           else
                            s=a[f[i][j+1].n]+a[f[i-1][j].n]+1;
                           if(n2<s)
                           {
                               n2=s;
                               n3=i;
                               m=j;
                               t=f[i][j+1].c;
                           }
                       }

                   if(f[i+1][j].c==f[i][j+1].c)
                       if(f[i+1][j].c!=f[i][j].c)
                       {
                           if(f[i+1][j].n==f[i][j+1].n)
                            s=a[f[i+1][j].n]+1;
                           else
                           s=a[f[i+1][j].n]+a[f[i][j+1].n]+1;
                           if(n2<s)
                           {
                               n2=s;
                               n3=i;
                               m=j;
                               t=f[i+1][j].c;
                           }
                       }
                   if(f[i+1][j].c==f[i][j-1].c)
                       if(f[i+1][j].c!=f[i][j].c)
                       {
                           if(f[i+1][j].n==f[i][j-1].n)
                           s=a[f[i+1][j].n]+1;
                           else
                           s=a[f[i+1][j].n]+a[f[i][j-1].n]+1;
                           if(n2<s)
                           {
                               n2=s;
                               n3=i;
                               m=j;
                               t=f[i+1][j].c;
                           }
                       }
               }*/
           fout<<n3<<' '<<m<<'\n';
           fout<<t;
       }



      /*  {
            while(!qx.empty())
            {
                char t=f[b][d].c
                int b=qx.front();
                qx.pop();
                int d=qy.front();
                qy.pop();
                if(f[b][d+1].c!=t && f[b][d-1].c!=t)
                {

                }
                if(f[b][d+1].c!=t && f[b+1][d].c!=t)
                {

                }

            }
        }*/




    return 0;
}