Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <stack>
- #include <string>
- int main() {
- bool wasGlobal = false;
- std::stack<std::string> programStack;
- std::string s, tmp, answer = "YES";
- getline(std::cin, s);
- for (int i = 0; i < s.size(); ++i) {
- if (s[i] == '<') {
- tmp.clear();
- int j = i + 1;
- bool isOpen = true;
- bool isCorrectClosed = false;
- if (s[j] == '/') {
- isOpen = false;
- j++;
- }
- while (j < s.size() && s[j] != '>') {
- tmp += s[j++];
- }
- if (j < s.size() && s[j] == '>') {
- isCorrectClosed = true;
- }
- if (!isCorrectClosed) {
- answer = "NO";
- break;
- }
- if (isOpen) {
- if (programStack.empty() && wasGlobal) {
- answer = "NO";
- break;
- }
- wasGlobal = true;
- programStack.push(tmp);
- } else {
- if (programStack.empty() || programStack.top() != tmp) {
- answer = "NO";
- break;
- }
- programStack.pop();
- }
- i = j;
- } else {
- if (programStack.empty()) {
- answer = "NO";
- break;
- }
- }
- }
- if (!programStack.empty() || s.empty()) {
- answer = "NO";
- }
- std::cout << answer;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement