Advertisement
Misbah_Uddin_Tareq

Untitled

Oct 1st, 2020
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.62 KB | None | 0 0
  1. // Start Time:
  2. #include<iostream>
  3. #include<vector>
  4. #include<algorithm>
  5. #include<cstdio>
  6. #include<cstring>
  7. #include<string>
  8. #include<utility>
  9.  
  10. using namespace std;
  11. #define  ll                     long long
  12. #define  pb                     push_back
  13. #define  pii                    pair<int,int>
  14. #define  pll                    pair<ll,ll>
  15. #define  ff                     first
  16. #define  ss                     second
  17. #define  MX                     1000000
  18. #define  endl                   "\n"
  19. #define  mod                    1000000007
  20. #define  eps                    1/1000000000
  21. #define  pi                     acos(-1.0)
  22. #define  PQ                     priority_queue
  23. #define  mem(a,b)               memset(a, b, sizeof(a))
  24. #define  bug(a)                 cout<<#a<<":"<<a<<endl
  25. #define  all(x)                 (x).begin(),(x).end()
  26. #define  allr(x)                (x).rbegin(),(x).rend()
  27. #define  double_print(x,a)      cout<<fixed<<setprecision(x)<<a<<endl
  28.  
  29. struct node
  30. {
  31.     bool endmark;
  32.     node* next[10+1];
  33.     node()
  34.     {
  35.         endmark = false;
  36.         for(int i=0; i<10; i++)
  37.             next[i]= NULL;
  38.     }
  39. } *root;
  40.  
  41. void insert(string str, int len)
  42. {
  43.     node* cur = root;
  44.     for(int i=0; i<len; i++)
  45.     {
  46.         int id = str[i] - '0';
  47.         if(cur->next[id] == NULL)
  48.             cur->next[id] = new node();
  49.         cur = cur->next[id];
  50.     }
  51.     cur->endmark = true;
  52. }
  53.  
  54. bool search (string str, int len)
  55. {
  56.     node* cur = root;
  57.     for(int i=0; i<len; i++)
  58.     {
  59.         int id = str[i] - '0';
  60.         if(cur->endmark)
  61.             return false;
  62.         cur = cur->next[id];
  63.     }
  64.     return cur->endmark;
  65. }
  66.  
  67. void del(node* cur)
  68. {
  69.     for(int i=0; i<10; i++)
  70.         if(cur->next[i])
  71.             del(cur->next[i]);
  72.     delete(cur);
  73. }
  74.  
  75. int main()
  76. {
  77.     //ios::sync_with_stdio(0); //cin.tie(0);
  78.  
  79.     string s;
  80.     vector<pair<int,string>>v;
  81.     root=new node();
  82.     int tc=1;
  83.     while(cin>>s)
  84.     {
  85.         if(s=="9")
  86.         {
  87.             sort(allr(v));
  88.             int k=0;
  89.             for(auto it:v)
  90.             {
  91.                 if(!search(it.ss,it.ff))
  92.                 {
  93.                     k=1;
  94.                     break;
  95.                 }
  96.             }
  97.  
  98.             if(k)
  99.                 cout<<"Set "<<tc<<" is not immediately decodable\n";
  100.             else
  101.                 cout<<"Set "<<tc<<" is immediately decodable\n";
  102.             del(root);
  103.             v.clear();
  104.             root=new node();
  105.             tc++;
  106.             continue;
  107.         }
  108.  
  109.         int len=s.size();
  110.         insert(s,len);
  111.         v.pb({len,s});
  112.     }
  113.  
  114.     return 0;
  115. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement