Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 6311 Accepted Submission(s): 1648
//优先级排序: //1、"))))((((" 中 ‘)‘ < ‘(‘ 的 , 按 ‘)‘ 从小到大排序 ; //2、"))))((((" 中 ‘)‘ >= ‘(‘ 的 , 按 ‘(‘ 从大到小排序 ; #include<cstdio> #include<algorithm> #include<cstring> #include<queue> #include<stack> using namespace std; const int maxn=100000; char s[maxn+10]; struct tstr { int r,l; }; tstr str[maxn+10]; bool cmp(tstr a,tstr b) { if(a.r<a.l&&b.r>=b.l) return true; if(b.r<b.l&&a.r>=a.l) return false; if(a.r<a.l&&b.r<b.l) return a.r<b.r; else return a.l>b.l; } int main() { int t; scanf("%d",&t); while(t--) { int n; scanf("%d",&n); int ans=0; for(int i=0;i<n;i++) { scanf("%s",s); stack<char> sta; sta.push(‘)‘);//在栈底放一个‘)‘,方便后续操作 for(int j=0;s[j]!=‘\0‘;j++) { if(s[j]==‘)‘&&sta.top()==‘(‘) ans+=2,sta.pop(); else sta.push(s[j]); } str[i].r=-1;str[i].l=0; while(!sta.empty()) { if(sta.top()==‘(‘) str[i].l++,sta.pop(); if(sta.top()==‘)‘) str[i].r++,sta.pop(); } } sort(str,str+n,cmp); stack<char> sta; sta.push(‘)‘); for(int i=0;i<n;i++) { for(int j=0;j<str[i].r;j++) { if(sta.top()==‘(‘) ans+=2,sta.pop(); else sta.push(‘)‘); } for(int j=0;j<str[i].l;j++) { sta.push(‘(‘); } } printf("%d\n",ans); } return 0; }
hdu 6299 Balanced Sequence (贪心)
原文:https://www.cnblogs.com/acboyty/p/9684014.html