51NOD 1791 合法括号子段
2017-10-27 00:52
323 查看
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1791
用一个栈来维护,碰到左括号入栈,碰到右括号出栈,
出栈规则:栈顶不为左括号或者已出栈的右括号大于左括号。
循环完了再把栈里剩余的处理一遍。
用一个栈来维护,碰到左括号入栈,碰到右括号出栈,
出栈规则:栈顶不为左括号或者已出栈的右括号大于左括号。
循环完了再把栈里剩余的处理一遍。
#include<bits/stdc++.h> using namespace std; string s; long long fc(long long k) { return k*(k+1)/2; } int main() { long long t; cin>>t; while(t--) { string s; cin>>s; stack<char> st; long long l,r; l=r=0; long long ans=0; for(long long i=0; i<s.size(); i++) { if(s[i]=='(') st.push('('); else { long long cnt=0; long long sum=0; while(!st.empty()&&(st.top()!='('||cnt>0)) { // cout<<st.top()<<endl; if(st.top()==')') cnt++,sum++; else cnt--; st.pop(); } if(!st.empty()) st.push(')'); ans+=fc(sum); } } l=r=0; while(!st.empty()) { if(st.top()==')') r++; else l++; if(l>r) { ans+=fc(r); r=0; l=0; } st.pop(); } ans+=fc(r); cout<<ans<<endl; } }
相关文章推荐
- 51nod 1791 合法括号子段(模拟)
- 51nod 1791 合法括号子段 (队列)
- 51nod 1791 合法括号子段
- 51nod-1791-合法括号子段
- 合法括号子段 51Nod - 1791 (栈+dp)
- 51nod 1791 合法括号子段 (dp)
- 51Nod 1791 合法括号子段(栈+乱搞)
- 51Nod-1791-合法括号子段
- 合法括号子段 51Nod - 1791 **
- 51nod 1791 合法括号子段(DP)
- 51nod 1791 合法括号子段 DP
- 51nod 1791 合法括号子段
- 1791 合法括号子段
- 【51nod 1791】 合法括号子段
- 51nod 合法括号子段
- 51 Nod 1791 合法括号子段【分治+字符串】
- 51nod_1791——合法括号字段
- 51 nod 合法括号子段 (单调栈)
- 合法括号子段
- 51Nod 1791 合法字符串 栈+动归