Cod sursa(job #1254950)

Utilizator patrutoiuandreipatrutoiu andrei patrutoiuandrei Data 3 noiembrie 2014 19:58:25
Problema Koba Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 4.31 kb
#include <fstream>

using namespace std;
ifstream fin("obmax.in");
ofstream fout("obmax.out");
int a[30][30],b[30][30],q[2][300],l,c,x,y,i,j,l1,l2,l3,c1,c2,c3,k,m,n,OK,p,u,nr,nr1,r,Max,r1;
int main()
{
fin>>n>>m;
int n1=n;
int m1=m;
int dx[]={-1,-1,0,1,1,1,0,-1};
int dy[]={0,1,1,1,0,-1,-1,-1};
for(i=1;i<=n;i++)
    for(j=1;j<=m;j++)
    {
        fin>>a[i][j];
    }
    for(i=0;i<=m+1;i++)
{
    a[0][i]=b[0][i]=-3;
    a[n+1][i]=b[n+1][i]=-3;
}
for(i=0;i<=n+1;i++)
{
    a[i][0]=b[i][0]=-3;
    a[i][m+1]=b[i][m+1]=-3;
}

for(i=1;i<=n;i++)
    for(j=1;j<=m;j++)
    {
        if(a[i][j]==1)
        {
            p=u=1;
            nr=1;
            a[i][j]=-1;
            q[0][p]=i;
            q[1][p]=j;
            while(p<=u)
            {
                x=q[0][p];
                y=q[1][p];
                for(k=0;k<8;k++)
                {
                    l=x+dx[k];
                    c=y+dy[k];
                    if(a[l][c]==1)
                        {
                            a[l][c]=-1;
                            nr++;
                            q[0][++u]=l;
                            q[1][u]=c;
                        }
                }
                p++;
            }
        }
        if(nr>Max)
        {
            Max=nr;
            l2=i;
            c2=j;
        }
    }
    int OK1=0;
    p=u=1;
    q[0][p]=l2;
    q[1][p]=c2;
    a[l2][c2]=2;
    while(p<=u)
    {
        x=q[0][p];
        y=q[1][p];
        for(k=0;k<8;k++)
        {
            l=x+dx[k];
            c=y+dy[k];
            if(a[l][c]==-1)
            {
                a[l][c]=-2;
                q[0][++u]=l;
                q[1][u]=c;
            }
        }
        p++;

    }

for(i=1;i<=n;i++)
{
    for(j=1;j<=m;j++)
    {   OK=1;
        for(int t=1;t<=u;t++)
        {
            if(a[i+q[0][t]-l2][j+q[1][t]-c2]!=0)
            {
                OK=0;
            }
        }
        if(OK==1)
        {
                OK1=1;
                l3=i;
                c3=j;
                break;
        }
    }

}
            /*p=u=1;
            b[i][j]=r;
            q[0][p]=i;
            q[1][p]=j;
            l1=l2;
            c1=c2;
            OK=1;
            nr1=1;
            while(p<=u)
            {
                x=q[0][p];
                y=q[1][p];
                for(k=0;k<8;k++)
                {
                    l=x+dx[k];
                    c=y+dy[k];
                    if(a[l][c]==0&&a[l1+dx[k]][c1+dy[k]]==-1&&b[l][c]!=r)
                    {
                        l1+=dx[k];
                        c1+=dy[k];
                        b[l][c]=r;
                        q[0][++u]=l;
                        q[1][u]=c;
                        nr1++;
                    }
                    if(a[l][c]==-1&&a[l1+dx[k]][c1+dy[k]]==-1)
                    {
                        OK=0;
                        break;
                    }
                }
                if(OK==0)
                break;
                p++;
            }

        }
        if(nr1==Max)
            {
                OK1=1;
                l3=i;
                c3=j;
                r1=r;
                break;
            }
    }
    if(nr1==Max)
        break;

}*/

/*for(i=1;i<=n;i++)
    {
        for(j=1;j<=m;j++)
        fout<<b[i][j]<<" ";
        fout<<"\n";
    }*/
p=u=1;
//fout<<l3<<" "<<c3<<'\n';


q[0][p]=l2;
q[1][p]=c2;

if(OK1==1){
Max--;
p=u=1;
a[l3][c3]=3;
while(p<=u)
{
    x=q[0][p];
    y=q[1][p];
    for(k=0;k<8;k++)
    {
        l=x+dx[k];
        c=y+dy[k];
        if(a[l][c]==-2&&(a[l+l3-l2][c+c3-c2]==0||a[l+l3-l2][c+c3-c2]==3))
        {   Max--;
            a[l+l3-l2][c+c3-c2]=3;
            a[l][c]=2;
            q[0][++u]=l;
            q[1][u]=c;
        }
    }
    p++;
}
}
else{
    p=u=1;
    q[0][p]=l2;
    q[1][p]=c2;
    a[l2][c2]=2;
    while(p<=u)
    {
        x=q[0][p];
        y=q[1][p];
        for(k=0;k<8;k++)
        {
            l=x+dx[k];
            c=y+dy[k];
            if(a[l][c]==-2)
            {
                a[l][c]=2;
                q[0][++u]=l;
                q[1][u]=c;
            }
        }
        p++;

    }

}
for(i=1;i<=n1;i++)
    {
        for(j=1;j<=m1;j++)
        {
            if(a[i][j]==-1)
                a[i][j]=1;
        }
    }

for(i=1;i<=n1;i++)
    {
        for(j=1;j<=m1;j++)
        fout<<a[i][j]<<" ";
        fout<<"\n";
    }


    return 0;
}