poj 3991 Seinfeld

我的做法是,用栈把能stable的去掉,把剩下的左空号和右括号的个数分别算出来n,m,n和m肯定同奇同偶

如果是偶数的话,}}{{——>{}{},2次操作:n/2+m/2;

如果是奇数的话,}}}{——>{}{},3次操作:(n-1)/2+(m-1)/2+2;

View Code
#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;
}



posted @ 2011-11-14 13:26  104_gogo  阅读(164)  评论(0编辑  收藏  举报