Advertisement
Guest User

Untitled

a guest
Jan 13th, 2018
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.55 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. #define endl "\n"
  5. #define pb push_back
  6. #define ppb pop_back
  7. #define ff first
  8. #define ss second
  9.  
  10. typedef long long ll;
  11. typedef long double ld;
  12. typedef unsigned long long ull;
  13. typedef unsigned int ui;
  14.  
  15. bool check(string &s) {
  16.     vector<string> fname;
  17.     vector<bool> fcloser;
  18.  
  19.     for(int i = 0; i < s.size(); ) {
  20.         if(s[i] == '>') return false;
  21.         if(s[i] == '<' && s[i + 1] != '/') {
  22.             int p = i + 1;
  23.             string name;
  24.             while(s[p] != '>') {
  25.                 if(p == s.size()) return false;
  26.                 if(s[p] == '/') return false;
  27.                 if(s[p] == '<') return false;
  28.                 name += s[p];
  29.                 p++;
  30.             }
  31.             fname.pb(name);
  32.             fcloser.pb(false);
  33.             i = p + 1;
  34.         } else
  35.             if(s[i] == '<' && s[i + 1] == '/') {
  36.             int p = i + 2;
  37.             string name;
  38.             while(s[p] != '>') {
  39.                 if(s[p] == '/') return false;
  40.                 if(s[p] == '<') return false;
  41.                 name += s[p];
  42.                 p++;
  43.                 if(p == s.size()) return false;
  44.             }
  45.             fname.pb(name);
  46.             fcloser.pb(true);
  47.             i = p + 1;
  48.         }
  49.         else i++;
  50.     }
  51.  
  52.     stack<string> stname;
  53.     stack<bool> stcloser;
  54.     for(int i = 0; i < fname.size(); i++) {
  55.         if(fcloser[i]) {
  56.             if(stname.empty()) return false;
  57.             if(stcloser.top()) return false;
  58.             if(stname.top() != fname[i]) return false;
  59.             stname.pop();
  60.             stcloser.pop();
  61.         } else {
  62.             stname.push(fname[i]);
  63.             stcloser.push(fcloser[i]);
  64.         }
  65.     }
  66.  
  67.     if(!stname.empty()) return false;
  68.  
  69.     return true;
  70. }
  71.  
  72. ///Hi There!
  73. int main(int argc, char **argv)
  74. {
  75.     ios_base::sync_with_stdio(false);
  76.     cin.tie(nullptr);
  77.     cout.tie(nullptr);
  78. #ifdef LOCAL
  79.     freopen("input.txt", "r", stdin);
  80.     freopen("output.txt", "w", stdout);
  81. #else
  82.     freopen("input.txt", "r", stdin);
  83.     freopen("output.txt", "w", stdout);
  84. #endif
  85.  
  86.     const string sl = "qwertyuiopasdfghjklzxcvbnm<>/";
  87.     string s;
  88.  
  89.     cin >> s;
  90.     for(int i = 0; i < s.size(); i++) {
  91.         for(int j = 0; j < sl.size(); j++) {
  92.             if(sl[j] == s[i]) continue;
  93.             char t = s[i];
  94.             s[i] = sl[j];
  95.             if(check(s)) {
  96.                 cout << s;
  97.                 return 0;
  98.             }
  99.             s[i] = t;
  100.         }
  101.     }
  102.  
  103.     return EXIT_SUCCESS;
  104. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement