UOJ 31 UR 2 豬豬俠再戰括號序列

2021-08-01 06:54:30 字數 2150 閱讀 4818

我不曾上過大學,但這不影響我對離散數學、複雜性分析等領域的興趣;尤其是括號序列理論,一度令我沉浸其中,無法自拔。至於oi演算法競賽,我年輕時確有參加,雖僅獲一枚銅牌,但我素性淡泊,毫不在意,畢竟那所謂fft、仙人掌之類,只是些雕蟲小技罷了,登不上大雅之堂的;只有括號序列才會真正激發我的研究熱情。

我曾天真地以為,憑藉我的學識與才能,足可以在這世間安身立命;然而直到淪落街頭後,我終才領悟現實的殘酷。迫於生計,我只得轉向道德與哲學的研究;但我與括號序列之間情愫依舊,難以剪斷。

理性的傳播總是不順的,研究的道路也是曲折的,但輕易放棄決不是我的風格;為了繼續實現自己的理想,現在我向大家提出一道括號序列的超級大難題。

有乙個由 

n n

個左括號 「(」 和 

n n

個右括號 「)」 組成的序列。每次操作時可以選定兩個數 l,

r l,r

,然後把第 

l l

到第 r r

個括號的順序翻轉(括號的朝向保持不變)。例如將 「()((()(」 翻轉第 

3 3

到第 7 7

個括號後的結果為 「()()(((」。

我希望使用不超過 

n n

次操作,將這個序列變為乙個合法的括號序列。

眾所周知,合法括號序列的定義如下:

() 是合法括號序列;

如果 a 是合法括號序列,則 (a) 是合法括號序列;

如果 a,b 是合法括號序列,則 ab 是合法括號序列。

自從來到 uoj 這個寶地,我的視野變得開闊了,也見識了更多富有人類智慧型的人士。我相信各位一定能給我更加滿意的答案!

一行乙個長度為 2n

2n的非空字串表示初始序列。保證字串只包含左括號和右括號,且左右括號的個數均為 

n n

。對於給出的字串,輸出調整成合法的括號序列的方案。如果不存在這樣的方案輸出一行乙個整數 −1

−1。否則,第一行乙個整數 

m m

表示要進行 

m m

次翻轉操作。

接下來 

m m

行每行兩個整數 l,

r l,r

表示要翻轉區間 [l

,r] [l,r]

內的括號順序。翻轉操作會按你輸出的順序執行。

請保證 m≤

n m≤n

以及 1≤

l≤r≤

2n1≤l≤r≤2n

,否則會被判 

0 0

分。如果有多組方案,輸出任意一組即可。

input

)))()(((
output
2

1 65 8

explanation

第一次操作後序列變為 「()()))((」。

第二次操作後序列變為 「()()(())」。

測試點編號

n n

的規模1n≤

4 n≤42n

≤100

n≤10034

56n≤

100000

n≤10000078

910時間限制:1s

1s空間限制:

256mb

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

貪心~

splay也能做……就是不知

麻煩到**去了……

設'('==-1,')'==1,那麼當now==0時,之前的括號都可以匹配。當now==1時,表示當前)比(多,一定要修改。所以我們線性掃一遍,記錄now值,如果now==1,就從這裡開始修改,直到修改到now==0的位置,記錄一下然後掃完輸出就可以了~

因為題目保證左右括號各n個,所以不存在無解的情況。

(我的程式是uoj第二快~紀念一下~)

注意輸入的字串長度是2n的,小心re!

#include#includeint n,now,ans[100001][3],tot;

char ch[200001];

int main()

} printf("%d\n",tot);

for(int i=1;i<=tot;i++) printf("%d %d\n",ans[i][1],ans[i][2]);

return 0;

}

BZOJ4350 括號序列再戰豬豬俠

括號序列與豬豬俠又大戰了起來。眾所周知,括號序列是乙個只有 和 組成的序列,我們稱乙個括號 序列s合法,當且僅當 1.是乙個合法的括號序列。2.若a是合法的括號序列,則 a 是合法的括號序列。3.若a,b是合法的括號序列,則ab是合法的括號序列。我們考慮match i 表示從左往右數第i個左括號所對...

bzoj4350 括號序列再戰豬豬俠

括號序列與豬豬俠又大戰了起來。眾所周知,括號序列是乙個只有 和 組成的序列,我們稱乙個括號 序列s合法,當且僅當 1.是乙個合法的括號序列。2.若a是合法的括號序列,則 a 是合法的括號序列。3.若a,b是合法的括號序列,則ab是合法的括號序列。我們考慮match i 表示從左往右數第i個左括號所對...

bzoj4350 括號序列再戰豬豬俠 區間DP

括號序列與豬豬俠又大戰了起來。眾所周知,括號序列是乙個只有 和 組成的序列,我們稱乙個括號 序列s合法,當且僅當 1.是乙個合法的括號序列。2.若a是合法的括號序列,則 a 是合法的括號序列。3.若a,b是合法的括號序列,則ab是合法的括號序列。我們考慮match i 表示從左往右數第i個左括號所對...