Advertisement
yuawn

algo2017_week10_trees_on_the_level

Dec 6th, 2017
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.37 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define pb push_back
  4. #define ALL(o) (o).begin(),(o).end()
  5. #define fo(n) for(int i=0;i<n;i++)
  6. #define fos(o,n) for(int i=o;i<=n;i++)
  7.  
  8.  
  9. struct tr{
  10.     string s;
  11.     int n;
  12. };
  13.  
  14. bool cmp( tr a , tr b ){
  15.     if( a.s.size() != b.s.size() ) return a.s.size() < b.s.size();
  16.     else return a.s < b.s;
  17. }
  18.  
  19. int main(){
  20.  
  21.     int T;
  22.    
  23.     scanf( "%d\n" , &T );
  24.    
  25.     while( T-- ){
  26.         vector<tr> p;
  27.         map<string,int> mp;
  28.        
  29.         string s , ss;
  30.        
  31.         getline( cin , s );
  32.        
  33.         bool numb = 0 , strb = 0 , no = 0;
  34.         int num = 0;
  35.        
  36.         fo( s.size() ){
  37.             if( s[i] == '(' ) numb = 1;
  38.             else if( s[i] == ')' ){
  39.                 tr tmp;
  40.                 tmp.n = num;
  41.                 tmp.s = ss;
  42.                 if( s[i - 1] != '(' ) {
  43.                     ++mp[ ss ];
  44.                     p.pb( tmp );
  45.                 }
  46.                 num = numb = strb = 0;
  47.                 ss = "";
  48.             }
  49.             else if( s[i] == ',' ){
  50.                 numb = 0;
  51.                 strb = 1;
  52.             }
  53.             else if( numb ){
  54.                 num *= 10;
  55.                 num += s[i] - 48;
  56.             }
  57.             else if( strb ){
  58.                 ss += s[i];
  59.             }
  60.         }
  61.        
  62.         sort( ALL(p) , cmp );
  63.        
  64.         for( int i = 1 ; i < p.size() ; ++i ) {
  65.             string tmp;
  66.             for( int j = 0 ; j < p[i].s.size() - 1 ; ++j ) tmp += p[i].s[j];
  67.             if( mp[ p[i].s ] > 1 || !mp[ tmp ] ) {
  68.                 no = 1;
  69.                 puts( "not complete" );
  70.                 break;
  71.             }
  72.         }
  73.        
  74.         if( no ) continue;
  75.  
  76.         cout << p[0].n;
  77.         fos( 1 , p.size() - 1 ) cout << ' ' << p[i].n;
  78.         puts( "" );
  79.        
  80.     }
  81.  
  82.     return 0;
  83. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement