http://tjuacm.chaosheng.top/problem.php?id=1254
一开始直接这么写,能过样例,但是在vj上提交WA
#include <iostream> #include <cstdio> #include <cstring> #include <string> using namespace std; int main(){ string s; while(cin >> s){ int n = s.size(); int i = 0, count = 0; while(i < n && s[i] != 'B'){ if(s[i] == '('){ count++; } i++; } printf("%d\n", count); } return 0; }
注意这里B之前可能出现空盒,这个是可以不拆开的。所以算最小次数要减去左右括号配对的。
用栈实现,最后栈的大小就是所求。
#include <iostream> #include <cstdio> #include <cstring> #include <string> #include <stack> using namespace std; int main(){ string s; while(cin >> s){ stack<char> brac; int n = s.size(); int i = 0; while(i < n && s[i] != 'B'){ if(brac.empty()){ brac.push(s[i]); }else{ if(brac.top() == '(' && s[i] == ')'){ brac.pop(); }else{ brac.push(s[i]); } } i++; } printf("%d\n", brac.size()); } return 0; }