[Virtual] JOI 本選 2020
TOI 1! Day 2
選訓一天一 OI 計畫 #1 ><
賽前
因為這場是在選訓 vir 的,所以時間上是 10:00 ~ 中午吃飯 ~ 15:40,維持總時間 4 小時。
賽中
記得 JOI 是有按照難度排序的,所以開場先讀 A
- A Just Long Neckties
給你長度是 $N + 1$ 的 $A$ 陣列跟長度是 $N$ 的 $B$ 陣列,定義一個配對 $A_i$ 對 $B_j$ 的奇異度是 $\min\{A_i - B_j ,\, 0\}$,
對每個 $A$ 陣列的元素輸出把他拔掉之後,所有 $B$ 陣列的都配對完的最小最大奇異度。
$1 \leq N \leq 2 \times 10^5$
[1] $N \leq 10$
[8] $N \leq 2000$
[91] 無額外限制
大水題,sort 之後對前綴後綴做完就
00:08 A 100
$\newline$
寫完之後繼續往下讀,
- B JJOOII 2
輸出湊出剛好是「J
重複 $K$ 次、O
重複 $K$ 次、I
重複 $K$ 次」的字串需要最少多少時間。
$3 \leq N \leq 2 \times 10^5,\, 1 \leq K \leq \frac N 3$
[1] $N \leq 21$
[12] $N \leq 3000$
[87] 無額外限制
一開始怎麼想都只會做兩個,但後來發現其實只要不斷做 sliding window 就做完了,打錯字 WA 超多次,還好都有找到。
00:36 B 100
$\newline$
- C Collecting Stamps 3
你在一個長度為 $L$ 的圓圈上,第 $i$ 個收集站在 $X_i$ 的位置,如果你在 $T_i$ 之前抵達可以收集到第 $i$ 種郵票,
輸出你可以最多拿到多少種郵票。 $1 \leq N \leq 200,\, 2 \leq L \leq 10^9,\, 1 \leq X_i < L$
[5] $N \leq 12,\, L \leq 200,\, T_i \leq 200$
[10] $N \leq 15$
[10] $L \leq 200,\, T_i \leq 200$
[75] 無額外限制
稍微想一下就可以列出這個狀態:
$dp_{i,\,j,\,k,\,0}$ 表示你已經走過 $[i..j]$ 並且得到 $k$ 分的最短時間,最後停留在 $i$,
$dp_{i,\,j,\,k,\,1}$ 則是最後停留在 $j$,
把環狀拓展成兩倍然後注意 $j - i < N$ 就好,過程中迴圈順序搞反 WA 了一次,最後過了。
01:07 C 100
$\newline$
- D Olympic Bus
給你一張 $N$ 點 $M$ 邊的圖,走第 $i$ 條邊的花費是 $C_i$,反轉的花費是 $D_i$,你最多能反轉一條邊,
問從 $1$ 到 $N$ 再回來的最小花費,或決定不可能。
$2 \leq N \leq 200,\, 1 \leq M \leq 50000$
[5] $M \leq 1000$
[11] 所有的邊都剛好有偶數個複本
[21] $C_i = 0$
[63] 無額外限制
一開始 naive 的做法是直接暴力然後每次做 Dijkstra,但這樣複雜度是 $O(M^2\log M)$ 或 $O(MN^2)$,顯然不會過。
後來想一想了很久發現有些邊似乎可以偷懶不要做,於是就有這個做法:
- 先跑一次最短路,還有反過來的最短路
- 對每條邊如果有在已經找到的最短路中,重算,不然就利用正的反的計算答案。
這樣一來複雜度是 $O(M + N^3)$ 或 $O(NM \log M)$,實作有點小繁雜但整體來說還可以,所以我就先去吃飯然後再回來實作了。
(回來的時候 PixelCat 睡著了)
03:21 D 100
$\newline$
這時候還有快一個半小時可以做 E,於是我就開始全力做:
- E Fire
給定長度為 $N$ 的陣列在時間 $0$ 的樣子 $S_i$,每秒如果該陣列左邊的元素比他大,他就會改成他左邊的元素。
$Q$ 筆詢問在給定時間 $T_i$,$L_i$ 到 $R_i$ 的區間和。
$1 \leq N,\,Q \leq 2 \times 10^5,\, 1 \leq T_i \leq N$
[1] $N,\,Q \leq 200$
[6] $T_i$ 相同
[7] 單點查詢
[6] $S_i \in \{1,\, 2\}$
[80] 無額外限制
看完的時候推一推發現每個人影響的範圍都是一個平行四邊形,當下就有想到要用線段樹 + 掃描線維護,
但是一直想不到要怎麼維護斜的修改。
於是我就開始寫了子題看看有沒有幫助,$1$ 分用暴力、$6$ 分用 sliding window + 前綴和、$7$ 分用二分搜然後 $6$ 分用 BIT。
最後子題真的完全沒有幫助,燒雞。
03:55 E 1
04:10 E 7
04:16 E 14
04:24 E 20
$\newline$
Result
Sum | |||||||
---|---|---|---|---|---|---|---|
A | |||||||
B | |||||||
C | |||||||
D | |||||||
E | 80 | 20 | |||||
Score | 420 |
級距落在 400 ~ 499 的前 7 內。
賽後補題
賽後我把 E 成功補掉了,算是少數我可以補成功的 OI,
基本上就是把平行四邊形拆成三角形,然後三角形拆成矩形跟等差位移的矩形,所以總共要兩棵線段樹。
我還一直拿 BIT 區間修改區間查詢,笨死zzz
檢討
基本上打的還可以,除了屢屢出小 bug 以外。
但 E 基本上我應該要做出來,我被線段樹打爆。
希望模考可以好好寫出我應該要會的題目,
選訓加油 ><