0%

TIOJ 2155 & TIOJ 2151

今天Codeforces燒機

所以只能上TIOJ解解題目 (´;ω;`)

然後就發現建中的校內賽有夠難的

果然是全台第一志願

TIOJ 2155 - 對發票 Again!

看到這題時 發現就是要找所有字串的共同子字串且這個子字串在每個字串中不重複

突然想到不久前才學過的 Suffix Array 可以做到這件事情

所以就開始刻這題了

舉例

1
2
3
4
5
6
5
ramen
lamian
raaamen
yesiam
diamond

我們先將這些字串串起來 然後找出這幾個的 LCP Array

最後將後綴編號 最後選取所有編號都出現一次的那個 找出LCP值

且與前後比對 就可以找到不重複的共同子字串

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
aaamen#yesiam#diamond$                            編號:3 ,與前一個的LCP: 0
aamen#yesiam#diamond$ 編號:3 ,與前一個的LCP: 2
==========================================================================
這段是我們所要選的答案 LCP大小為: 2 共同子字串為: "am"
am#diamond$ 編號:4 ,與前一個的LCP: 1
amen#lamian#raaamen#yesiam#diamond$ 編號:1 ,與前一個的LCP: 2
amen#yesiam#diamond$ 編號:3 ,與前一個的LCP: 5
amian#raaamen#yesiam#diamond$ 編號:2 ,與前一個的LCP: 2
amond$ 編號:5 ,與前一個的LCP: 2
==========================================================================
an#raaamen#yesiam#diamond$ 編號:2 ,與前一個的LCP: 1
d$ 編號:5 ,與前一個的LCP: 0
diamond$ 編號:5 ,與前一個的LCP: 1
en#lamian#raaamen#yesiam#diamond$ 編號:1 ,與前一個的LCP: 0
en#yesiam#diamond$ 編號:3 ,與前一個的LCP: 3
esiam#diamond$ 編號:4 ,與前一個的LCP: 1
iam#diamond$ 編號:4 ,與前一個的LCP: 0
iamond$ 編號:5 ,與前一個的LCP: 3
ian#raaamen#yesiam#diamond$ 編號:2 ,與前一個的LCP: 2
lamian#raaamen#yesiam#diamond$ 編號:2 ,與前一個的LCP: 0
==========================================================================
這段不是我們要選的答案 LCP大小為: 0 共同子字串為: ""
m#diamond$ 編號:4 ,與前一個的LCP: 0
men#lamian#raaamen#yesiam#diamond$ 編號:1 ,與前一個的LCP: 1
men#yesiam#diamond$ 編號:3 ,與前一個的LCP: 4
mian#raaamen#yesiam#diamond$ 編號:2 ,與前一個的LCP: 1
mond$ 編號:5 ,與前一個的LCP: 1
==========================================================================
n#lamian#raaamen#yesiam#diamond$ 編號:1 ,與前一個的LCP: 0
n#raaamen#yesiam#diamond$ 編號:2 ,與前一個的LCP:2
n#yesiam#diamond$ 編號:3 ,與前一個的LCP:2
nd$ 編號:5 ,與前一個的LCP:1
ond$ 編號:5 ,與前一個的LCP:0
raaamen#yesiam#diamond$ 編號:3 ,與前一個的LCP:0
ramen#lamian#raaamen#yesiam#diamond$ 編號:1 ,與前一個的LCP:2
siam#diamond$ 編號:4 ,與前一個的LCP:0
yesiam#diamond$ 編號:4 ,與前一個的LCP:0


不過這題最後我砸了很多次

發現錯在Counting sort的時候使用vector會太慢

所以把Counting sort改成用陣列就可以過了

TIOJ 2151 - 大富翁

這題很明顯就是裸矩陣快速冪

所以刻出來就過了