Cod sursa(job #1540346)

Utilizator lauratalaatlaura talaat lauratalaat Data 2 decembrie 2015 17:46:00
Problema Ferma Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 3.32 kb
#include<stdio.h>
int b[401][401],c1[401][401],d[401][401],verif[401][401];
char a[401][401];
int linie[4]={-1,0,1,0};
int coloana[4]={0,1,0,-1};
int cate,x=1;
int feel( int l , int c, char val ){
    int i,lin,col;
    b[l][c]=-1;
    for(i=0;i<4;i++){
        lin=l+linie[i];
        col=c+coloana[i];
        if(a[lin][col]==val&&b[lin][col]!=-1){
            cate++;
            feel(lin,col,val);
        }
    }
    return cate;
}
void fill ( int l , int c , int val , char eg ){
    int i,lin,col;
    c1[l][c]=val;
    d[l][c]=-1;verif[l][c]=x;
    for(i=0;i<4;i++){
        lin=l+linie[i];
        col=c+coloana[i];
        if(a[lin][col]==eg&&d[lin][col]!=-1){
            fill(lin,col,val,eg);
        }
    }
}
int main(){
    int i,j,r,max,cer,n,m,lin,col,dd;
    char c,cul;
    freopen("ferma3.in","r",stdin);
    freopen("ferma3.out","w",stdout);
    scanf("%d",&cer);
    scanf("%d%d%c",&n,&m,&c);
    for(i=1;i<=n;i++){
        for(j=1;j<=m;j++)
            scanf("%c",&a[i][j]);
        scanf("%c",&c);
    }
    max=-1;
    if(cer==1){
        for(i=1;i<=n;i++)
            for(j=1;j<=m;j++)
                if(b[i][j]==0){
                    cate=1;
                    r=feel(i,j,a[i][j]);
                    if(r>max)
                        max=r;
                }
        printf("%d\n",max);
    }
    else{
         for(i=1;i<=n;i++)
            for(j=1;j<=m;j++)
                if(b[i][j]==0){
                    cate=1;
                    r=feel(i,j,a[i][j]);
                    fill(i,j,r,a[i][j]);
                    x++;
                }
        max=-1;dd=1;
        for(i=1;i<=n;i++)
            for(j=1;j<=m;j++)
                if(a[i][j-1]==a[i][j+1]&&a[i][j]!=a[i][j-1]&&j-1>=1&&j+1<=m&&verif[i][j-1]!=verif[i][j+1]){
                    r=c1[i][j-1]+c1[i][j+1];
                    if(r>max){
                        max=r+1;
                        lin=i;
                        col=j;
                        cul=a[i][j-1];
                    }
                }
                else{
                    if(a[i][j-1]==a[i][j+1]&&a[i][j]!=a[i][j-1]&&j-1>=1&&j+1<=m&&verif[i][j-1]==verif[i][j+1]){
                        dd=2;
                        max=c1[i][j-1];
                        lin=i;
                        col=j;
                        cul=a[i][j-1];
                    }
                }
         for(i=1;i<=n;i++)
            for(j=1;j<=m;j++)
                if(a[i-1][j]==a[i+1][j]&&a[i][j]!=a[i-1][j]&&i-1>=1&&i+1<=n&&verif[i-1][j]!=verif[i+1][j]){
                    r=c1[i-1][j]+c1[i+1][j];
                    if(r>max){
                        max=r+1;
                        lin=i;
                        col=j;
                        cul=a[i+1][j];
                    }
                }
                else{
                    if(a[i-1][j]==a[i+1][j]&&a[i][j]!=a[i-1][j]&&i-1>=1&&i+1<=n&&verif[i-1][j]==verif[i+1][j]){
                        dd=2;
                        max=c1[i-1][j];
                        lin=i;
                        col=j;
                        cul=a[i-1][j];
                    }
                }
        if(dd==1)
            printf("%d\n%d %d\n%c\n",max,lin,col,cul);
        else
            printf("%d\n%d %d\n%c\n",max+1,lin,col,cul);
    }
    return 0;
}