Дерево игры - в прилагаемом файле. У игрока, делающего ход первым (Пети) есть выигрышная стратегия: первый ход должен быть +3 (в куче получится 13 камней). В этом случае при ходе второго игрока (Вани) +3 (в куче 16 камней) первый (Петя) выигрывает ходом *2 (в куче 32 камня); при ходе второго игрока (Вани) *2 (в куче 26 камней) первый (Петя) также выигрывает ходом *2 (в куче 52 камня). Второй игрок (Ваня) может выиграть только в случае, если первый (Петя) сделает начальный ход *2 (в куче 20 камней), следующий ход (Вани) *2 (в куче 40 камней) приводит к выигрышу.
#include <iostream>
#include <stack>
using namespace std;
void solve(string &s){
stack<char> cur;
for(int i = 0; i < s.size(); i++){
if(!cur.empty() && ((cur.top() == '(' && s[i] == ')') || (cur.top() == '{' && s[i] == '}') || (cur.top() == '[' && s[i] == ']')))
cur.pop();
else cur.push(s[i]);
}
if(cur.empty()) cout << "YES";
else cout << "NO";
}
signed main() {
string str;
cin >> str;
solve(str);
}