Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1624 Accepted Submission(s): 792
在读入的过程中,把相匹配的删除,最后会存在下面三种形态:
1. }}}...
2. {{{...
3. }}}...{{{...
对于每种形态就很容易求了。
题解:
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #include<cmath> 6 #include<vector> 7 using namespace std; 8 const int INF=0x3f3f3f3f; 9 #define mem(x,y) memset(x,y,sizeof(x)) 10 #define SI(x) scanf("%d",&x) 11 #define PI(x) printf("%d",x) 12 #define SD(x,y) scanf("%lf%lf",&x,&y) 13 #define P_ printf(" ") 14 const int MAXN=2010; 15 int dp[MAXN]; 16 char q[MAXN]; 17 typedef long long LL; 18 int main(){ 19 char s[MAXN]; 20 int kase=0; 21 while(scanf("%s",s),s[0]!=‘-‘){ 22 int top=0; 23 for(int i=0;s[i];i++){ 24 if(top==0||s[i]==‘{‘)q[++top]=s[i]; 25 else if(q[top]==‘{‘&&s[i]==‘}‘)--top; 26 else q[++top]=s[i]; 27 } 28 // for(int i=1;i<=top;i++)printf("%c",q[i]);puts(""); 29 int ans; 30 if(top==0||q[top]==‘}‘)ans=top/2; 31 else if(q[1]==‘{‘&&q[top]==‘{‘)ans=top/2; 32 else{ 33 int ans1=0,ans2=0,k=1; 34 while(q[k]==‘}‘)k++; 35 ans1=k-1; 36 ans2=top-k+1; 37 ans=(ans1+1)/2+(ans2+1)/2; 38 } 39 ++kase; 40 printf("%d. %d\n",kase,ans); 41 } 42 return 0; 43 }
原文:http://www.cnblogs.com/handsomecui/p/5203434.html