有乙個括號序列,現在要計算一下它有多少非空子段是合法括號序列。
合法括號序列的定義是:
1.空序列是合法括號序列。
2.如果s是合法括號序列,那麼(s)是合法括號序列。
3.如果a和b都是合法括號序列,那麼ab是合法括號序列。
input
多組測試資料。output第一行有乙個整數t(1<=t<=1100000),表示測試資料的數量。
接下來t行,每一行都有乙個括號序列,是乙個由'('和')'組成的非空串。
所有輸入的括號序列的總長度不超過1100000。
輸出t行,每一行對應乙個測試資料的答案。input示例
5(()output示例()()
(()(())
01312
#include #include #include using namespace std;
typedef long long int ll;
const int maxn = 1100005;
char input[maxn];
int pos[maxn];
ll dp[maxn];
int main()
for (int j = 0; j < len; j++)
else
}} for (int j = len-1; j >= 0; j--)
}cout << result << endl;
} return 0;
}
51nod 1791 合法括號子段
題解 我們可以發現每一對可以匹配的左右括號一定是一一對應的,那麼我們用乙個棧維護即可。如果當前是右括號,棧頂是左括號,那麼一定有1的貢獻,還要加上之前到達過top 1這個位置多少次,因為現在這一對括號可以和之前的那些組成更長的序列。1 include2 include3 include4 defin...
51nod 1791 合法括號子段
有乙個括號序列,現在要計算一下它有多少非空子段是合法括號序列。合法括號序列的定義是 1.空序列是合法括號序列。2.如果s是合法括號序列,那麼 s 是合法括號序列。3.如果a和b都是合法括號序列,那麼ab是合法括號序列。多組測試資料。第一行有乙個整數t 1 t 1100000 表示測試資料的數量。接下...
51nod 1791 合法括號子段 (dp)
有乙個括號序列,現在要計算一下它有多少非空子段是合法括號序列。合法括號序列的定義是 空序列是合法括號序列。如果 s 是合法括號序列,那麼 s 是合法括號序列。如果 a 和 b 都是合法括號序列,那麼 ab 是合法括號序列。多組測試資料。第一行有乙個整數 t 1 t 1100000 表示測試資料的數量...