http://codeforces.com/problemset/problem/494/A
题意 有一串字符串由 ( ) # 组成
#代表若干个 )
问#具体为多少时可以使每个( 都对应一个 )
思路 由于可以有多种方式组合
可以默认前 cnt-1 个 #号 与它前一个 ( 匹配
之后再对最后一个#进行特判(分别判断 #右边的num1 和左边的num2 如果num2-num1>0 则满足)
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; char str[100000+100]; int main() { int i,j,k; while(scanf("%s",str)!=EOF) { int len=strlen(str); int ans,cnt=0,num1=0,num2=0,tcnt=0; int ok=1; for(i=0;i<len;i++) { if(str[i]==‘#‘) cnt++; } for(i=len-1;i>=0;i--) { if(str[i]==‘#‘) break; if(str[i]==‘)‘) num1++; else if(str[i]==‘(‘) num1--; if(num1<0) {ok=0;break;} } if(ok) { for(i=0;i<len;i++) { if(str[i]==‘#‘) tcnt++; if(tcnt<cnt) { if(str[i]==‘(‘) num2++; else if(str[i]==‘)‘||str[i]==‘#‘) num2--; } else { ans=num2-num1; if(ans<=0) ok=0; break; } if(num2<0) {ok=0;break;} } } if(ok) { for(i=0;i<cnt-1;i++) printf("1\n"); printf("%d\n",ans); } else printf("-1\n"); } return 0; }
时间: 2024-10-28 16:39:39