Codeforces Gym - 101341A Streets of Working Lanterns - 2 [贪心]
2017-07-26 20:25
330 查看
题意:给出n个括号序列,问能否按一定顺序排列序列使其成为正规序列
题解 : 用栈的方法去处理每一个括号序列,处理完之后会出现四种情况的串 ①( ②)(③)④空串,我们将情况①优先放在最前面情况③放在最后,情况②按某种排序排列后依次加入(调了很多估价函数= =)。
AC代码:
题解 : 用栈的方法去处理每一个括号序列,处理完之后会出现四种情况的串 ①( ②)(③)④空串,我们将情况①优先放在最前面情况③放在最后,情况②按某种排序排列后依次加入(调了很多估价函数= =)。
AC代码:
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; int top,s; char a[200005],sta[200005]; int sum1[200005],sum2[200005]; int flag[200005]; int id[200005]; int rs; bool judge(int a,int b) { double va=-(double)(rs-sum2[a])*0.5+(sum1[a]-sum2[a])*0.77; double vb=-(double)(rs-sum2[b])*0.5+(sum1[b]-sum2[b])*0.77; return va>vb; } bool cmp(int a,int b) { if(flag[a]!=2&&flag[b]!=2)return flag[a]<flag[b]; if(flag[a]!=2&&flag[b]==2)return false; if(flag[a]==2&&flag[b]!=2)return true; return judge(a,b); } int main() { int n; scanf("%d",&n); rs=0; for(int i=0;i<n;i++) { scanf("%s",a); int l=strlen(a); top=0; for(int j=0;j<l;j++) { if(top==0)sta[top++]=a[j]; else if((sta[top-1]=='('&&a[j]==')'))top--; else sta[top++]=a[j]; } int flag1=0,flag2=0; for(int j=0;j<top;j++) { if(sta[j]=='(')flag1=1,sum1[i]++; if(sta[j]==')')flag2=1,sum2[i]++; } flag[i]=flag1+flag2; if(flag1==1&&flag2==0)rs+=sum1[i]; } for(int i=0;i<n;i++)id[i]=i; sort(id,id+n,cmp); int r=0; int s=1; int i; for(int ii=0;ii<n;ii++) { i=id[ii]; if(flag[i]==1&&sum1[i]!=0) { r+=sum1[i]; } } for(int ii=0;ii<n;ii++) { i=id[ii]; if(flag[i]==2||flag[i]==0) { if(r<sum2[i])s=0; r-=sum2[i]; r+=sum1[i]; } } for(int ii=0;ii<n;ii++) { i=id[ii]; if(flag[i]==1&&sum2[i]!=0) { if(r<sum2[i])s=0; r-=sum2[i]; } } if(r!=0||s==0)printf("NO\n"); else { printf("YES\n"); for(int ii=0;ii<n;ii++) { i=id[ii]; if(flag[i]==1&&sum1[i]!=0)printf("%d ",i+1); } for(int ii=0;ii<n;ii++) { i=id[ii]; if(flag[i]==2||flag[i]==0)printf("%d ",i+1); } for(int ii=0;ii<n;ii++) { i=id[ii]; if(flag[i]==1&&sum2[i]!=0)printf("%d ",i+1); } pri 4000 ntf("\n"); } }
相关文章推荐
- Codeforces Gym 100203E E - bits-Equalizer 贪心
- Codeforces Gym H. Hell on the Markets 贪心
- CodeForces Gym 100646D Party Party Party 贪心
- Codeforces Gym 100269E Energy Tycoon 贪心
- Codeforces gym 100685 E. Epic Fail of a Genie 贪心
- 【Codeforces Gym 100187F 】+ 贪心
- codeforces Gym 100187F F - Doomsday 区间覆盖贪心
- CodeForces Gym 100685E Epic Fail of a Genie (贪心,控制精度)
- CodeForces Gym 100803A 模拟,贪心
- CodeForces Gym 100685I Innovative Business (贪心)
- Codeforces Gym 100803C Shopping 贪心好题
- Codeforces Gym 100203E bits-Equalizer 贪心
- Codeforces Gym 100269E Energy Tycoon 贪心
- codeforces Gym 100338E Numbers (贪心,实现)
- Codeforces Gym 100803C Shopping 贪心
- 【codeforces Gym - 100187K】+ 构造 + 贪心
- Codeforces Gym 100231B Intervals 线段树+二分+贪心
- Codeforces Gym 101173 A. Appearance Analysis
- Codeforces Gym 101173 J. Jazz Journey
- Codeforces Gym 100337B Lempel-Ziv Compression 字符串DP