Advertisement
Guest User

Untitled

a guest
Nov 18th, 2019
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.83 KB | None | 0 0
  1.  
  2. #include<vector>
  3. #include<iostream>
  4. #include<set>
  5. #include<map>
  6. #include<algorithm>
  7. #include<string.h>
  8.  
  9. using namespace std ;
  10.  
  11. char hx[17] = {'0', '1','2','3' , '4' ,'5' , '6' , '7'  ,'8' , '9' , 'a', 'b' , 'c' , 'd' , 'e'  , 'f'};
  12. string bn[17] = {"0000" , "0001" , "0010" , "0011" , "0100" , "0101" , "0110" , "0111", "1000" , "1001" , "1010", "1011" , "1100", "1101", "1110","1111"};
  13. int n , m ;
  14. string s="" , a;  
  15. vector<string> v(206);
  16. int vis[206][206];
  17. int conn[206][206];
  18. map<int,int>  mp ;  
  19. int dx[4] = {1,-1 ,0,0} , dy[4]= {0,0, 1,-1};
  20. // number will start from 2
  21. set<int> dfs(int x , int y  ){
  22.       vis[x][y]= true;
  23.       set<int> ss,  l;
  24.       for(int i=0 ; i< 4 ; i++){
  25.           if(x+dx[i]>=0 && x+dx[i]<n+2 && y+dy[i]>=0 && y+dy[i]<4*m+2  ){
  26.               //cout<<x+dx[i]<<" "<<y+dy[i]<<endl;
  27.               if(!vis[x+dx[i]][y+dy[i]] && v[x+dx[i]][y+dy[i]]=='0') {
  28.                         l =dfs(x+dx[i],y+dy[i]) ;
  29.                         ss.insert(l.begin() , l.end());
  30.               }
  31.               if(v[x+dx[i]][y+dy[i]]=='1')ss.insert(conn[x+dx[i]][y+dy[i]]);  
  32.           }
  33.       }
  34.       return ss;
  35. }
  36. void chnawa(int x , int y ,int number){
  37.       vis[x][y]= true;
  38.       conn[x][y] = number;
  39.       for(int i=0 ; i< 4 ; i++){
  40.           if(x+dx[i]>=0 && x+dx[i]<n+2 && y+dy[i]>=0 && y+dy[i]<4*m+2){
  41.               if(!vis[x+dx[i]][y+dy[i]] && v[x+dx[i]][y+dy[i]]=='1') {
  42.                       chnawa(x+dx[i],y+dy[i] , number);
  43.                      //s.insert(ll.begin(), ll.end());
  44.               }
  45.              // if(conn[x+dx[i]][y+dy[i]]!=0) s.insert(conn[x+dx[i]][y+dy[i]]);
  46.           }
  47.       }
  48.      // return s;
  49. }
  50. int main()
  51. {
  52.   cin>>n>>m;
  53.   int cases =1;
  54.   while(n !=0 && m!= 0){
  55.      string all ="";
  56.      memset(vis, false , sizeof(vis));
  57.      memset(conn, 0 , sizeof(conn));
  58.      mp.clear();
  59.      for(int j =0; j<4*m+2; j++) all+='0';
  60.      v[0]=all;
  61.      for(int i=1 ; i<n+1 ; i++){
  62.         cin>>a ; s="";
  63.         for(int j=0;j<m; j++){
  64.               for(int k=0 ; k<17 ; k++){
  65.                     if(a[j]==hx[k]) s+=bn[k];
  66.               }
  67.         }
  68.  
  69.         v[i]='0'+s+'0';
  70.      }
  71.       v[n+1] = all;
  72.      int number = 1  ;
  73.      for(int i=0 ; i<n+2; i++){
  74.        for(int j =0 ; j<4*m+2; j++){
  75.             if(v[i][j] =='1'  && !vis[i][j]) {
  76.                mp[number] = 0 ;
  77.                chnawa(i , j , number); number++ ;  
  78.             }
  79.        }
  80.      }
  81.      for(int i=0 ; i<n+2 ; i++){
  82.        for(int j =0 ; j<4*m+2; j++){
  83.             if(v[i][j] =='0'  && !vis[i][j]) {
  84.                 set<int> d = dfs(i , j ) ;
  85.                 if(d.size() == 1) {
  86.                    mp[*d.begin()]++;
  87.                 }
  88.             }
  89.        }
  90.      }
  91.      string sz="";  
  92.    
  93.      /*for(int i =0 ; i<n+2 && n==3; i++){
  94.            for(int j=0; j<4*m+2; j++){
  95.                  cout<<conn[i][j]<<" ";      
  96.            }
  97.            cout<<endl;
  98.      }*/
  99.      for(auto it = mp.begin(); it != mp.end(); it++){
  100.          if(number>2){
  101.               switch (it->second) {
  102.                    case 0 : sz+='W' ; break;
  103.                    case 1 : sz+='A' ; break;
  104.                    case 2 : sz+='K' ; break;
  105.                    case 3 : sz+='J' ; break;
  106.                    case 4 : sz+='S' ; break;
  107.                    case 5 : sz+='D' ; break;
  108.             }
  109.          }else{
  110.             switch (it->second) {
  111.                    case 1 : sz+='W' ; break;
  112.                    case 2 : sz+='A' ; break;
  113.                    case 3 : sz+='K' ; break;
  114.                    case 4 : sz+='J' ; break;
  115.                    case 5 : sz+='S' ; break;
  116.                    case 6 : sz+='D' ; break;
  117.           }  
  118.          }
  119.          
  120.      }
  121.      cout<<"Case "<<cases<<": ";
  122.      sort(sz.begin() , sz.end());
  123.      cout<<sz<<endl;
  124.      cases++;
  125.      cin>>n>>m;
  126.   }
  127.   return 0;
  128. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement