51nod 1791 合法括號子段

2022-07-23 17:33:19 字數 722 閱讀 6474

【題解】

我們可以發現每一對可以匹配的左右括號一定是一一對應的,那麼我們用乙個棧維護即可。如果當前是右括號,棧頂是左括號,那麼一定有1的貢獻,還要加上之前到達過top-1這個位置多少次,因為現在這一對括號可以和之前的那些組成更長的序列。

1 #include2 #include3 #include4

#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 }

view code

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 ...