fork download
  1. #include <iostream>
  2. #include <string>
  3. #include <cstring>
  4. #include <cmath>
  5. using namespace std;
  6.  
  7. struct stack{
  8. char *bkt = new char;
  9. int cur;
  10. stack(){cur = 0;}
  11. void push(char x){
  12. bkt[cur++] = x;
  13. }
  14. void pop(){
  15. cur--;
  16. }
  17. char back(){
  18. return bkt[cur-1];
  19. }
  20. int size(){
  21. return cur;
  22. }
  23. };
  24.  
  25. int main() {
  26. string brace;
  27. cin >> brace;
  28. stack x;
  29. if(brace[0] == '(' || brace[0] == '{' || brace[0] == '[') x.push(brace[0]); //Правильное выражение начинается только с открывающей скобки
  30. else{
  31. if(brace == "") cout << "YES";//Выражение без скобок также првильное
  32. else cout << "NO";
  33. return 0;
  34. }
  35. for(int i = 1; i < brace.length(); i++){
  36. if(brace[i] == '(' || brace[i] == '{' || brace[i] == '['){ //Любую открывающую скобку добавляем в стек
  37. x.push(brace[i]);
  38. }
  39. else if(abs(brace[i] - x.back()) < 3 && x.size() != 0){//Модуль разницы скобок одного типа меньше трех
  40. x.pop();
  41. }
  42. else{
  43. cout << "NO";
  44. return 0;
  45. }
  46. }
  47. if(x.size() == 0) cout << "YES";//Правильное арифметическое выражение получим при пустом стэке
  48. else cout << "NO";
  49. return 0;
  50. }
Success #stdin #stdout 0s 3416KB
stdin
Standard input is empty
stdout
YES