前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >POJ 3991 Seinfeld

POJ 3991 Seinfeld

作者头像
ShenduCC
发布2018-04-26 11:57:06
5500
发布2018-04-26 11:57:06
举报
文章被收录于专栏:算法修养算法修养

Seinfeld Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 1285 Accepted: 599 Description

I’m out of stories. For years I’ve been writing stories, some rather silly, just to make simple problems look difficult and complex problems look easy. But, alas, not for this one. You’re given a non empty string made in its entirety from opening and closing braces. Your task is to find the minimum number of “operations” needed to make the string stable. The definition for being stable is as follows:

An empty string is stable.

If S is stable, then {S} is also stable.

If S and T are both stable, then ST (the concatenation of the two) is also stable.

All of these strings are stable: {}, {}{}, and {{}{}}; But none of these: }{, {{}{, nor {}{. The only operation allowed on the string is to replace an opening brace with a closing brace, or visa-versa. Input

Your program will be tested on one or more data sets. Each data set is described on a single line. The line is a non-empty string of opening and closing braces and nothing else. No string has more than 2000 braces. All sequences are of even length. The last line of the input is made of one or more ’-’ (minus signs.) Output

For each test case, print the following line: k. N Where k is the test case number (starting at one,) and N is the minimum number of operations needed to convert the given string into a balanced one. Sample Input

}{ {}{}{}

{{{}

Sample Output

  1. 2
  2. 0
  3. 1
代码语言:javascript
复制
#include <iostream>
#include <string.h>
#include <stdlib.h>
#include <iostream>
#include <algorithm>
#include <stdio.h>

using namespace std;
char  a[2005];
char b[2005];
int top;
int main()
{
    int cas=0;
    while(scanf("%s",a)!=EOF)
    {
        if(a[0]=='-')
            break;
        int len=strlen(a);
        top=-1;
        int ans=0;
        for(int i=0;i<len;i++)
        {
            if(a[i]=='{')
                b[++top]=a[i];
            else
            {
                if(top==-1)
                {
                    b[++top]='{';
                    ans++;
                }
                else
                {
                    if(b[top]=='{')
                        top--;
                }
            }
        }
        ans+=(top+1)/2;
        printf("%d. %d\n",++cas,ans);
    }
    return 0;
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-03-09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • {{{}
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档