Advertisement
Ryuuk

4966 - Normalized Form

Jun 4th, 2018
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.94 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. #define sz(a) int((a).size())
  3. #define pb push_back
  4. #define all(c) (c).begin(),(c).end()
  5. #define tr(c,i) for(typeof((c).begin() i = (c).begin(); i != (c).end(); i++)
  6. #define present(c,x) ((c).find(x) != (c).end())
  7. #define cpresent(c,x) (find(all(c),x) != (c).end())
  8. #define LSOne(i) (i&(-i))
  9. #define rep(i,a,b) for(int(i)=(a);(i)<(b);i++)
  10. #define BUG(x) {cout<<#x<<" = "<<x<<endl;}
  11. #define left(x) (x<<1)
  12. #define right(x) ((x<<1) +1)
  13. #define middle(s,e)(s+(e-s)/2)
  14. #define size_tree(n) 2*(int)pow(2,ceil(log2(n)))
  15. #define CL(A,I) (memset(A,I,sizeof(A)))
  16. #define endl '\n'
  17. #define PHAS(_n) (pbits[(_n)>>5] & (1u << ((_n) & 0x1f)))
  18. #define PSET(_n) (pbits[(_n)>>5] |= (1u << ((_n) & 0x1f)))
  19. //unsigned int pbits[200000000/32+1];
  20.  
  21. static const int INF = 0x3f3f3f3f;
  22. static const long long INFL = 0x3f3f3f3f3f3f3f3fLL;
  23. static const long double epsilon = 1e-15;
  24. static const long double pi = acos((long double) -1);
  25. using namespace std;
  26. inline void init_io(){ios_base::sync_with_stdio(false);cin.tie(NULL);}
  27.  
  28. typedef vector<int> vi;
  29. typedef vector<vi> vvi;
  30. typedef pair<int,int> ii;
  31. typedef long long ll;
  32. string s;
  33. map<int,int> m;
  34.  
  35.  
  36. bool solve(int ss,int ee,int op)
  37. {
  38.     bool res=(op==1)?true:false;
  39.     bool tmp;
  40.     for(int i=ss+1;i<ee;)
  41.     {
  42.         if(s[i]=='(')
  43.         {
  44.             tmp=solve(i,m[i],1-op);
  45.             i=m[i];
  46.         }
  47.         else
  48.             tmp=(s[i]=='F')?false:true;
  49.  
  50.         if(op) res&=tmp;
  51.         else res|=tmp;
  52.         i++;
  53.     }
  54.     return res;
  55. }
  56.  
  57.  
  58. int main()
  59. {
  60.         int test=1;
  61.     while (cin>>s && s.size()>2)
  62.         {
  63.       int idx=0;
  64.             int deep=0;
  65.       vector<int> q;
  66.             m.clear();
  67.             q.clear();
  68.             while (idx!=s.size())
  69.             {
  70.                 if(s[idx]=='(')
  71.                     q.push_back(idx);
  72.                 else if(s[idx]==')')
  73.                 {
  74.                     deep=max(deep , int(q.size()) );
  75.                     m[q[q.size()-1]]=idx;
  76.                     q.pop_back();
  77.                 }
  78.                 idx++;
  79.             }
  80.             if(solve(0,s.size()-1,deep%2))
  81.                 cout<<test<<". true\n";
  82.             else
  83.                 cout<<test<<". false\n";
  84.             test++;
  85.     }
  86.     return 0;
  87. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement