Advertisement
Guest User

Untitled

a guest
Jun 23rd, 2017
49
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.91 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <vector>
  4. #include <cctype>
  5. using namespace std;
  6.  
  7. #define MAX 1000
  8. typedef pair < int , int > pii ;
  9.  
  10. char map[MAX][MAX] ;
  11. int fam[MAX][MAX] ;  
  12. int C , R ;
  13.  
  14. int row[] = { -1 , 1 , 0 , 0 , 1 , -1 , -1 , 1 } ;
  15. int col[] = { 0 , 0 , -1 , 1 , 1 , 1 , -1 , -1 } ;
  16.  
  17.  
  18. void init(int r , int c ){ for ( int i = 0 ; i < r ; i++ ) for ( int j = 0 ; j < c ; j++ ) fam[i][j] = 0 ; }
  19.  
  20. bool is_valid( int r , int c ) { if ( r >= 0 && r <= R && c >= 0 && c <= C ) return true ; return false ; }
  21.  
  22. void dfs ( pii s , int monkey )
  23. {
  24.    
  25.     int r = s.first , c = s.second ;
  26.     fam[r][c] = monkey ;
  27.     for ( int i = 0 ; i < 8 ; i++ )
  28.         if ( is_valid ( r + row[i] , c + col[i] )  && map[r][c] == map[r + row[i]][c + col[i]] )
  29.             if( fam[r + row[i]][c + col[i]] == 0 )
  30.                 dfs ( pii ( r + row[i] , c + col[i] ) , monkey ) ;
  31. }
  32.  
  33.  
  34. int main ()
  35. {
  36.     //freopen ( "in.txt" , "r" , stdin ) ;
  37.  
  38.     char S[MAX] ;
  39.     int i = 0 , j , k , per = 0 , monkey ;
  40.  
  41.     while ( gets(S) )
  42.     {
  43.         i = 0 ;
  44.         for ( j = 0 , k = 0 ; S[j] ; j++ ) if (  S[j] != ' '  ) map[i][k++] = S[j] ;
  45.         i++ ;
  46.         while ( true )
  47.         {
  48.             if ( gets(S) == NULL || S[0] == '%' ){ R = i ; i = 0 ; break ; }
  49.             for ( j = 0 , k = 0 ; S[j] ; j++ ) if (  isalpha ( S[j] ) ) map[i][k++] = S[j] ;
  50.             C = k ; i++ ;      
  51.         }
  52.        
  53.         monkey = 1 ;
  54.         init ( R , C ) ;
  55.         for ( i = 0 ; i < R ; i++ )
  56.             for ( j = 0 ; j < C ; j++ )
  57.             {
  58.                 if ( !fam[i][j] )
  59.                     dfs ( pii ( i , j ) , monkey++ ) ;
  60.             }
  61.        
  62.         int per[MAX] ;
  63.         for ( j = 0 ; j < C ; j++ )
  64.         {
  65.             int max = fam[0][j] ;
  66.             for ( i = 1 ; i < R ; i++ ) if ( max < fam[i][j] ) max = fam[i][j] ;
  67.             sprintf ( S , "%d" , max );
  68.             per[j] = strlen ( S ) ;
  69.         }
  70.  
  71.         for ( i = 0 ; i < R ; i++ )
  72.         {
  73.  
  74.             printf ( "%*d" , per[0] , fam[i][0] ) ;
  75.             for ( j = 1 ; j < C ; j++ ) printf ( "%*d" , per[j]+1 , fam[i][j] ) ;
  76.                 cout << endl ;
  77.         }
  78.         cout << '%' << endl ;
  79.  
  80.     }
  81.     return 0 ;
  82. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement