题目链接:http://codeforces.com/contest/1167/problem/D
【题意】给你一串长度为n(n是偶数)的括号序列,要把这个序列涂成两种颜色,从而分成两部分,使得两部分左右括号都能完全匹配并且要求最大值最小;
【分析】
一开始想记录连续的相同括号数,但是没处理好....
然后还是用栈做,之前遇到的这种括号匹配问题好像都用栈或队列处理的?
用两个栈,分别表示两个颜色,都只存左括号,然后进行括号的匹配即括号的进栈出栈;
【代码】
#include<bits/stdc++.h>
using namespace std;int main()
{int n;scanf("%d",&n);string str; cin>>str;string ans="";stack<char>st1,st2;for(int i=0;i<n;++i){if(str[i]=='('){if(st1.size()>st2.size()){st2.push(str[i]);ans+='1';}else{st1.push(str[i]);ans+='0';}}else{if(st1.size()>st2.size()){st1.pop();ans+='0';}else{st2.pop();ans+='1';}}}cout<<ans<<endl;return 0;
}