括号画家

水题。

 1 #include <cstdio>
 2 #include <cstring>
 3 const int N = 1000010;
 4 
 5 int stk[N], top;
 6 
 7 inline void max(int &a, int b) {
 8     if(a < b) a = b;
 9     return;
10 }
11 
12 inline int dig(char c) {
13     if(c == '(') return 1;
14     if(c == ')') return -1;
15     if(c == '[') return 2;
16     if(c == ']') return -2;
17     if(c == '{') return 3;
18     if(c == '}') return -3;
19     printf("ERROR!\n");
20     return 0;
21 }
22 
23 int main() {
24     freopen("sequence.in", "r", stdin);
25     char s[N];
26     int ans, ta;
27     while(scanf("%s", s) != EOF) {
28         ans = top = ta = 0;
29         for(int i = 0; i < strlen(s); i++) {
30             int p = dig(s[i]);
31             //printf("%d\n", p);
32             if(p + stk[top] == 0) {
33                 ans++;
34                 top--;
35             }
36             else if(p > 0) {
37                 stk[++top] = p;
38                 ans++;
39             }
40             else {
41                 if(top) ans -= top;
42                 max(ta, ans);
43                 ans = top = 0;
44             }
45             //printf("ans = %d\n", ans);
46         }
47         if(top) {
48             ans -= top;
49         }
50         max(ta, ans);
51         printf("%d\n", ta);
52     }
53     return 0;
54 }
伪AC代码

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

试一下这两组样例:[][    [) 

posted @ 2018-05-25 11:51  huyufeifei  阅读(659)  评论(0编辑  收藏  举报
试着放一个广告栏(虽然没有一分钱广告费)

ReadEra 阅读书籍

『Flyable Heart 応援中!』 HHG 高苗京铃 闪十PSS 双六 電動伝奇堂 章鱼罐头制作组 はきか 祝姬 星降夜