Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<vector>
- #include<iostream>
- #include<set>
- #include<map>
- #include<algorithm>
- #include<string.h>
- using namespace std ;
- char hx[17] = {'0', '1','2','3' , '4' ,'5' , '6' , '7' ,'8' , '9' , 'a', 'b' , 'c' , 'd' , 'e' , 'f'};
- string bn[17] = {"0000" , "0001" , "0010" , "0011" , "0100" , "0101" , "0110" , "0111", "1000" , "1001" , "1010", "1011" , "1100", "1101", "1110","1111"};
- int n , m ;
- string s="" , a;
- vector<string> v(206);
- int vis[206][206];
- int conn[206][206];
- map<int,int> mp ;
- int dx[4] = {1,-1 ,0,0} , dy[4]= {0,0, 1,-1};
- // number will start from 2
- set<int> dfs(int x , int y ){
- vis[x][y]= true;
- set<int> ss, l;
- for(int i=0 ; i< 4 ; i++){
- if(x+dx[i]>=0 && x+dx[i]<n+2 && y+dy[i]>=0 && y+dy[i]<4*m+2 ){
- //cout<<x+dx[i]<<" "<<y+dy[i]<<endl;
- if(!vis[x+dx[i]][y+dy[i]] && v[x+dx[i]][y+dy[i]]=='0') {
- l =dfs(x+dx[i],y+dy[i]) ;
- ss.insert(l.begin() , l.end());
- }
- if(v[x+dx[i]][y+dy[i]]=='1')ss.insert(conn[x+dx[i]][y+dy[i]]);
- }
- }
- return ss;
- }
- void chnawa(int x , int y ,int number){
- vis[x][y]= true;
- conn[x][y] = number;
- for(int i=0 ; i< 4 ; i++){
- if(x+dx[i]>=0 && x+dx[i]<n+2 && y+dy[i]>=0 && y+dy[i]<4*m+2){
- if(!vis[x+dx[i]][y+dy[i]] && v[x+dx[i]][y+dy[i]]=='1') {
- chnawa(x+dx[i],y+dy[i] , number);
- //s.insert(ll.begin(), ll.end());
- }
- // if(conn[x+dx[i]][y+dy[i]]!=0) s.insert(conn[x+dx[i]][y+dy[i]]);
- }
- }
- // return s;
- }
- int main()
- {
- cin>>n>>m;
- int cases =1;
- while(n !=0 && m!= 0){
- string all ="";
- memset(vis, false , sizeof(vis));
- memset(conn, 0 , sizeof(conn));
- mp.clear();
- for(int j =0; j<4*m+2; j++) all+='0';
- v[0]=all;
- for(int i=1 ; i<n+1 ; i++){
- cin>>a ; s="";
- for(int j=0;j<m; j++){
- for(int k=0 ; k<17 ; k++){
- if(a[j]==hx[k]) s+=bn[k];
- }
- }
- v[i]='0'+s+'0';
- }
- v[n+1] = all;
- int number = 1 ;
- for(int i=0 ; i<n+2; i++){
- for(int j =0 ; j<4*m+2; j++){
- if(v[i][j] =='1' && !vis[i][j]) {
- mp[number] = 0 ;
- chnawa(i , j , number); number++ ;
- }
- }
- }
- for(int i=0 ; i<n+2 ; i++){
- for(int j =0 ; j<4*m+2; j++){
- if(v[i][j] =='0' && !vis[i][j]) {
- set<int> d = dfs(i , j ) ;
- if(d.size() == 1) {
- mp[*d.begin()]++;
- }
- }
- }
- }
- string sz="";
- /*for(int i =0 ; i<n+2 && n==3; i++){
- for(int j=0; j<4*m+2; j++){
- cout<<conn[i][j]<<" ";
- }
- cout<<endl;
- }*/
- for(auto it = mp.begin(); it != mp.end(); it++){
- if(number>2){
- switch (it->second) {
- case 0 : sz+='W' ; break;
- case 1 : sz+='A' ; break;
- case 2 : sz+='K' ; break;
- case 3 : sz+='J' ; break;
- case 4 : sz+='S' ; break;
- case 5 : sz+='D' ; break;
- }
- }else{
- switch (it->second) {
- case 1 : sz+='W' ; break;
- case 2 : sz+='A' ; break;
- case 3 : sz+='K' ; break;
- case 4 : sz+='J' ; break;
- case 5 : sz+='S' ; break;
- case 6 : sz+='D' ; break;
- }
- }
- }
- cout<<"Case "<<cases<<": ";
- sort(sz.begin() , sz.end());
- cout<<sz<<endl;
- cases++;
- cin>>n>>m;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement