洛谷 P5329 SNOI2019 字串

2021-10-23 08:43:22 字數 899 閱讀 6953

暴力是過不了的,雜湊也不行。只能找規律。我們可以發現計刪除原串第i的字元後的新串為pi,則任意pi與pi+1(i#include

#include

#include

#include

using

namespace std;

const

int maxn =

1000010

;int a[maxn]

;int sum[maxn]

;int t =0;

char c[maxn]

;list<

int> li;

intmain()

li.insert

(li.

begin()

, t)

;for

(int i = t-

1;i>

0;i--

)int ans =0;

list<

int>

::iterator it;

for(it = li.

begin()

;it != li.

end(

);it++)}

cout << endl;

return0;

}關於部分**的說明:

li.

insert

(li.

begin()

, t)

;for

(int i = t-

1;i>

0;i--

)

這塊之所以這麼比較,是因為基於字典序和字首的思想,pi與pi+1字首[1, i-1]是相同的,第i位可以不同,如果pipi+1,且 pi-1pi+1,且 pi-1注:本**中p陣列已經進行了鄰項去重優化。

洛谷P5329 SNOI2019 字串

好像 dfs o n 暴力可以毫無壓力的輕鬆過,當然你要寫 text 也沒人攔你。如果兩個字元相同我們可以發現是一樣的,於是用乙個 a 陣列把這個東西壓起來。如果 s i s 那麼就刪除 s i 如果 s i s 那麼就刪除 s 然後一次 dfs 就解決了。include const int max...

洛谷P5329 SNOI2019 字串

題目大意 給乙個長度為 n 的字串 s 字串 p i 為字串 s 去掉第 i 個字元後形成的字串。請給所有字串 p i 排序 相同字串按編號排序 題解 先去掉所有連續相同字元,因為它們形成的字串一定相同 也就是說只按編號排序 然後發現對於兩個字串 p i,p j i卡點 無 c code inclu...

題解 P5329 SNOI2019 字串

用棧的做法來水一發。首先我們有乙個暴力的做法,列舉每個被刪除的字元,然後排序輸出,時間複雜度 o n times n times logn 然後我們觀察一下資料,發現有乙個資料點且任意兩個相鄰字元 a i 與 a 不相等 那麼我們考慮這樣乙個字串 acdedc 比如現在我們比較去掉第三位的字串和去掉...