poj 3991 Seinfeld
我的做法是,用栈把能stable的去掉,把剩下的左空号和右括号的个数分别算出来n,m,n和m肯定同奇同偶
如果是偶数的话,}}{{——>{}{},2次操作:n/2+m/2;
如果是奇数的话,}}}{——>{}{},3次操作:(n-1)/2+(m-1)/2+2;
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include <stdio.h>
#include <string.h>
int n;
char stack[2005];
void Push(char ch)
{
stack[++n]=ch;
}
char Pop()
{
if(n-1==-1)return '0';
return stack[n--];
}
int main()
{
int i,m,a,b,k=1,len;
char s[2005];
while (gets(s)!=NULL)
{
if(s[0]=='-')break;
len=strlen(s);
for (i=0,n=0,m=0;i<len;i++)
{
if(s[i]=='{')Push(s[i]);
else
{
if(Pop()!='{')m++;
}
}
if(m%2)a=(m-1)/2+1;
else a=m/2;
if(n%2)b=(n-1)/2+1;
else b=n/2;
printf("%d. %d\n",k++,a+b);
}
return 0;
}