#18. 括号画家——Yucai OJ第16次测试

Posted vocaoid

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了#18. 括号画家——Yucai OJ第16次测试相关的知识,希望对你有一定的参考价值。

问题描述

HYM是一名漫画家,她有一个奇特的爱好,就是在纸上画括号。 这一天,刚刚起床的 HYM 画了一排括号序列,其中包含小括号()、中括 号[]和大括号{},总长度为 N。这排随意绘制的括号序列显得杂乱无章,于是 HYM定义了什么样的括号序列是美观的: (1) 空的括号序列是美观的; (2) 若括号序列 A 是美观的,则括号序列(A)、[A]、{A}也是美观的; (3) 若括号序列 A、B 都是美观的,则括号序列 AB 也是美观的; 例如 [(){}]() 是美观的括号序列,而 )({)[}]( 则不是。 现在 Candela 想在她绘制的括号序列中,找出其中连续的一段,满足这段子 序列是美观的,并且长度尽量大。你能帮帮她吗?。

输入格式

第一行为 1 个长度为 N 的括号序列。

输出格式

一个整数,表示最长的美观的连续子序列的长度。

样例输入1

[[[[]]{}]]

样例输出1

10

样例输入2

({({(({()}})}{())})})[){{{([)()((()]]}])[{)]}{[}{)

样例输出2

4

数据范围

测试点编号NN特殊约定
1 5 存在部分数据,整个括号
序列都是合法的。 
也存在部分数据,整个括
号序列的任何一个连续子
序列都不是合法的。
2 10
3 50
4 100
5 100
6 1000
7 1000
8 10000
9 10000
10 10000

时空限制

0.1S/512MB

标程:

#include<bits/stdc++.h>
const int N=10005;
int hj[N];
char s[N];
int kh(char c){
    if(c==‘(‘){
		return 1;
	}else if(c==‘)‘){
		return -1;
	}else if(c==‘[‘){
		return 2;
	}else if(c==‘]‘){
		return -2;
	}else if(c==‘{‘){
		return 3;
	}else if(c==‘}‘){
		return -3;
	}
    return 0;
}
int main(){
    int a,b,c;
    while(scanf("%s",s)){
        a=b=c=0;
        for(int i=0;i<strlen(s);i++) {
            int p=kh(s[i]);
            if(p+hj[b]==0) {
                a++;
                b--;
            }else if(p>0) {
                hj[++b]=p;
                a++;
            }else{
                if(b){
					a-=b;
				}
                if(c<a){
                	c=a;
				}
                a=b=0;
            }
        }
        if(b){
            a-=b;
        }
        if(c<a){
        	c=a;
		}
        printf("%d",c);
        break;
    }
    return 0;
}


注:原题解见huyufeifei的 https://www.cnblogs.com/huyufeifei/p/9087800.html






以上是关于#18. 括号画家——Yucai OJ第16次测试的主要内容,如果未能解决你的问题,请参考以下文章

pku_oj: 1681Painter's Problem(画家问题)(C++)

5:括号画家

括号画家

RIGHT-BICEP测试第二次程序

OJ 第m小数

华为OJ平台——杨辉三角的变形