Nita_Cristian

ferma

Feb 26th, 2020
50
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.73 KB | None | 0 0
  1. #include<fstream>
  2. #include<iostream>
  3. #include<cstring>
  4. using namespace std;
  5. fstream fin("ferma.in",ios::in),fout("ferma.out",ios::out);
  6. char a[402][402];
  7. int n,m,Aux[402][402],ap[400*400+2],s[5];
  8. int di[]= {-1, 1, 0, 0};
  9. int dj[]= {0,  0, 1, -1};
  10. char dir[]="NSEV";
  11.  
  12. void Fill(int i,int j, int id)
  13. {
  14.     int d;
  15.     ap[id]++;
  16.     Aux[i][j]=id;
  17.     for(d=0; d<=3; d++)
  18.     {
  19.         if(a[i+di[d]][j+dj[d]]==a[i][j] && Aux[i+di[d]][j+dj[d]]==0)
  20.         {
  21.             Fill(i+di[d],j+dj[d],id);
  22.         }
  23.     }
  24. }
  25.  
  26. int main()
  27. {
  28.     int i,j,id=0,p,maxim=0,imax=0,jmax=0,k,l;
  29.     char cmax=0;
  30.     memset(a,'-',sizeof(a));
  31.     fin>>p>>n>>m;
  32.     for(i=1; i<=n; i++)
  33.     {
  34.         for(j=1; j<=m; j++)
  35.         {
  36.             fin>>a[i][j];
  37.         }
  38.     }
  39.     for(i=1; i<=n; i++)
  40.     {
  41.         for(j=1; j<=m; j++)
  42.         {
  43.             if(Aux[i][j]==0)
  44.             {
  45.                 id++;
  46.                 Fill(i,j,id);
  47.                 maxim=max(ap[id],maxim);
  48.             }
  49.         }
  50.     }
  51.     if(p==1)
  52.     {
  53.         fout<<maxim;
  54.     }
  55.     else
  56.     {
  57.         maxim=0;
  58.         for(i=1; i<=n; i++)
  59.         {
  60.             for(j=1; j<=m; j++)
  61.             {
  62.                 if(a[i][j]==a[i-1][j] && a[i][j]==a[i+1][j] && a[i][j]==a[i][j-1] && a[i][j]==a[i][j+1])
  63.                 {
  64.                     continue;
  65.                 }
  66.                 s[0]=ap[Aux[i-1][j]];//sus
  67.                 s[1]=ap[Aux[i+1][j]];//jos
  68.                 s[2]=ap[Aux[i][j+1]];//dr
  69.                 s[3]=ap[Aux[i][j-1]];//st
  70.                 for(k=0; k<4; k++)
  71.                 {
  72.                     for(l=k+1; l<4; l++)
  73.                     {
  74.                         if(Aux[i+di[k]][j+dj[k]]==Aux[i+di[l]][j+dj[l]])
  75.                         {
  76.                             s[l]=0;
  77.                         }
  78.                     }
  79.                 }
  80.                 for(k=0; k<4; k++)
  81.                 {
  82.                     for(l=k+1; l<4; l++)
  83.                     {
  84.                         if(a[i+di[k]][j+dj[k]]==a[i+di[l]][j+dj[l]] && Aux[i+di[k]][j+dj[k]]!=Aux[i+di[l]][j+dj[l]])
  85.                         {
  86.                             s[k]+=s[l];
  87.                             s[l]=0;
  88.                         }
  89.                     }
  90.                     if(a[i+di[k]][j+dj[k]]!=a[i][j])
  91.                     {
  92.  
  93.                         s[k]++;
  94.                     }
  95.                     if(maxim<s[k])
  96.                     {
  97.                         imax=i;
  98.                         jmax=j;
  99.                         cmax=a[i+di[k]][j+dj[k]];
  100.                         maxim=s[k];
  101.                     }
  102.                 }
  103.  
  104.             }
  105.         }
  106.         fout<<imax<<" "<<jmax<<"\n"<<cmax;
  107.     }
  108.  
  109.     fin.close();
  110.     fout.close();
  111.     return 0;
  112. }
Add Comment
Please, Sign In to add comment