冬のトレーニングキャンプ6 G基本的な算術シーケンスブラケットオフ2020頭の牛

https://ac.nowcoder.com/acm/contest/3007/G
タイトル説明

ブラケットがある正当なシーケンスを定義します。

1.空のシーケンスは、シーケンス正当ブラケットであります

2. Sが正当括弧配列である場合、(S)は、法的ブラケットのシーケンスであります

3. AとBが合法ブラケットシーケンスである場合、それは正当なブラケットシーケンスABであります

さて、少なくともいくつかの削除括弧シーケンス合法的に取得しようとしているブラケット、括弧のシーケンスを与えられました

括弧系列長Nに設けられたT、データの各セットを含む入力データセット

1≤T、ΣN≤1,000,000

(空の文字列が正当ブラケット配列であるので、答えはNであってもよいです)

思考

スタックのシミュレーション、彼らがいる場合'('、スタックに入った、彼らがしている場合')'、スタックは、レコード番号空の場合、それはポップするスタックの一番上の左括弧がある場合、何を決定するために

#include <bits/stdc++.h>
using namespace std;
int T;
const int N = 1e6 + 10;
char s[N];
char st[N];
int top;
int n;
int ans() {
    top = 0;
    int res = 0;
    for (int i = 1; i <= n; i++) {
        if (s[i] == '(') {
            st[++top] = '(';
        }
        else {
            if (top == 0) ++res;
            else if (st[top] == '(') {
                top--;
            }
        }
    }
    res += top;
    return res;
}
int main()
{
    ios::sync_with_stdio(0);
    cin >> T;
    while (T--) {
        cin >> n;
        cin >> s + 1;
        cout << ans() << "\n";
    }
    return 0;
}

 

公開された204元の記事 ウォン称賛13 ビュー10000 +

おすすめ

転載: blog.csdn.net/weixin_43701790/article/details/104332142