2023.04 TOI 潛力組題解

本文最後更新於:2023年5月1日 下午

Repo
我終於把專題趕完ㄌ(灑花

A.Icebreaker

problem

給你一堆關係,請你分成兩組,問怎麼分可以讓每一組中的任兩個人沒有關係。

solution

簡而言之又是個二分圖問題,但這題不需要複雜的演算法,直接DFS就可以ㄌ
走到一個點,如果之前沒經過,就幫他上跟父節點相反的顏色(總共只有兩種顏色),但如果之前有經過,就會有兩種情況:

  1. 顏色正常(跟父節點相反)
  2. 顏色錯誤(跟父節點相同)
    對於第一種情況,因為之前走過,勢必會將其子節點遞迴完,所以不必重複確認,可以直接返回。
    但如果是第二種情況,代表其必跟父節點同一組,但又因為跟父節點有關係,所以無論怎麼分都沒辦法符合題意,所以直接退出。

其實不是找環喔
舉個例:
1 2
2 3
3 4
4 1

code

B.Land

problem

給定一列土地,每塊土地都有一個地主 $a_i,1 \leq i \leq n$ 。
蓋房子需要地主同意,但你很懶,最多只想去問$k$個地主,問最多可以連續使用多少土地。

solution

簡單DP,我的做法是先離散化後再直接開個陣列 $now$ 紀錄目前已經使用每個地主幾塊地,再來是 $sig$ ,記錄現在需要徵求多少地主同意,可以在更新範圍時維護, $l$ 則是目前土地的最左端,同樣可以在更新範圍的時候維護。

然後寫個迴圈,從左到右更新範圍,最後將答案對 $(r - l) + 1$ 取最大值即可。

code

C.Name

problem

定義 $f_{i,j} = \{ 1\ when\ i = j\ ,\ 0\ otherwise \}$
給你一堆字串 $s_i,\forall\ 1 \leq i \leq n$ 試求

$$
\sum_{r = 1}^{|s_i|}\sum_{k = \{x | x \geq 1 \wedge x \leq n \wedge x \not= i\}} f_{s_i[1:r],s_k[1:r]}
$$

solution

說說我寫這題的心路歷程,
multiset -> unordered_multiset
拿到TLE後徹底自閉

後來決定直接砸Trie
大概就是建樹的時候每走到一個節點就把那個節點的值+1
取答案的時候照著走一遍,把走過的節點值加起來就是答案ㄌ
對 就是這樣 我相信你們都懂ㄌouob
好啦 看code

code


2023.04 TOI 潛力組題解
http://mysh212.github.io/algosolution/TOI-202304/
作者
ysh
發布於
2023年4月25日
更新於
2023年5月1日
許可協議