1478 括號序列的最長合法子段(模擬棧)

2021-10-01 07:06:02 字數 886 閱讀 4754

這裡有另乙個關於處理合法的括號序列的問題。

如果插入「+」和「1」到乙個括號序列,我們能得到乙個正確的數學表示式,我們就認為這個括號序列是合法的。例如,序列"(())()", 「()「和」(()(()))「是合法的,但是」)(」, "(()「和」(()))("是不合法的。

這裡有乙個只包含「(」和「)」的字串,你需要去找到最長的合法括號子段,同時你要找到擁有最長長度的子段串的個數。

輸入第一行是乙個只包含「(」和「)」的非空的字串。它的長度不超過 1000000。

輸出輸出合格的括號序列的最長子串的長度和最長子串的個數。如果沒有這樣的子串,只需要輸出一行「0 1」。

輸入樣例

)((())))(()())

輸出樣例

6 2如果當前是(則進棧,若是)則彈出棧,更新答案。dp[i]=dp[t-1]+i-t+1。t是棧頭部(的位置,i-t+1是指當前棧內滿足條件的長度。那個dp[t-1]是指以前的,就像((()))()在i=8位置(從1開始)=dp[6]+8-7+1=8。

#include.h>

using namespace std;

#define ll long long

string s;

stack<

int>q;

int f[

1000100];

int maxn=

0,num=

0,t=0,

len;

intmain()

if(f[i]

==maxn)

num++;}

}if(num) cout<" "

0<<

" "<<1;

return0;

}

1478 括號序列的最長合法子段

1478 括號序列的最長合法子段 基準時間限制 1 秒 空間限制 131072 kb 分值 40 難度 4級演算法題 這裡有另乙個關於處理合法的括號序列的問題。如果插入 和 1 到乙個括號序列,我們能得到乙個正確的數學表示式,我們就認為這個括號序列是合法的。例如,序列 和 是合法的,但是 和 是不合...

51Nod 1478 括號序列的最長合法子段

acm模版 一拿到題,就想到了乙個十分低階的做法,先正著遍歷一遍,遍歷過程中再倒著遍歷 one 不負眾望,tle了四組資料。無奈,想了一下,只好使用棧來實現了,先預處理一遍,將括號匹配在一起,然後檢索最長串即可 two one tle include include const int maxn 1...

51nod 1478 括號序列的最長合法子段

原題鏈結 1478 括號序列的最長合法子段 codeforces 基準時間限制 1 秒 空間限制 131072 kb 分值 40 難度 4級演算法題 這裡有另乙個關於處理合法的括號序列的問題。如果插入 和 1 到乙個括號序列,我們能得到乙個正確的數學表示式,我們就認為這個括號序列是合法的。例如,序列...