【題解】
我們可以發現每一對可以匹配的左右括號一定是一一對應的,那麼我們用乙個棧維護即可。如果當前是右括號,棧頂是左括號,那麼一定有1的貢獻,還要加上之前到達過top-1這個位置多少次,因為現在這一對括號可以和之前的那些組成更長的序列。
1 #include2 #include3 #include4view code#define ll long long
5#define n 2200010
6#define rg register
7using
namespace
std;
8int
n,t,top;
9ll ans;
10struct
stackst[n];
13char
s[n];
14 inline int
read()
20int
main();
28//
printf("%d %lld %lld\n",top,st[top].cnt,ans);29}
30 printf("
%lld\n
",ans);31}
32return0;
33 }
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 表示測試資料的數量...
51nod 1791 合法括號字段
原題連線 51nod 1791 合法括號字段 1791 合法括號子段 基準時間限制 1 秒 空間限制 131072 kb 分值 40 難度 4級演算法題 有乙個括號序列,現在要計算一下它有多少非空子段是合法括號序列。合法括號序列的定義是 1.空序列是合法括號序列。2.如果s是合法括號序列,那麼 s ...