1. 程式人生 > >coedforce #441 Div2不詳細解題報告

coedforce #441 Div2不詳細解題報告

開心 分解 冒泡 for 每一個 次數 log 開開 本質

A: 每次必然選擇相鄰邊中較短的一條,證明如下:
設當前在1號點,1->2 = a, 1->3 = b, 2->3 = c
假設 a < b 按照選擇較短的策略
此時如果選擇走a, 那麽接下來到達2,應當選擇Min(a, c)
此時如果不按照策略走b, 那麽接下來到達2, 應當選擇Min(b, c)
因為 a < b 所以 a + Min(a, c) < b + Min(b, c)
所以只要暴力走較短的邊累計答案就可以了

B: 對於任意一組合法解,所有數都是在%m意義下同余的,證明如下:
a0, a1, a2屬於一組合法解中
(a1 - a0) % m == (a2 - a0) % m
(a1 - a0) % m - (a2 - a0) % m == 0
(a1 - a0 - a2 + a0) % m == 0
(a1 - a2) % m == 0
a1 % m == a2 % m
所以只要%m的值開桶,並用vector記錄方案就可以了

C: n == x + (x的各位之和)
x很大,直接枚舉x並判斷超時,但x的各位之和 <= 99
所以枚舉x的各位之和, 判斷 (n - 枚舉的和) 分解後是否 == 枚舉的和即可

D: 本質是求冒泡排序的掃描次數
考慮這樣一種情況 xoxoxo..(後面都是o)
發現這樣的掃描次數是等於x的個數
但是 xoxoo(若幹個x)x這樣一種情況
顯然已經出擊右邊界的x不需要再比較
所以要減去觸及右邊界的x的個數
解法1:維護並查集每一次修改,將P[i]和P[i+1]合並,並維護size, 復雜度O(nlogn)
解法2: 考慮觸及右邊界的x的個數單調不降,維護最左邊的觸及邊界的x的指針,復雜度O(n)

E: 考慮相鄰的書的第一個不同位上的字母之間有選了就要選,和不能同時選兩種關系,於是就可以開開心心各種亂搞了

F:記錄每一個二進制位左邊第一個,和右邊第一個出現的第一個,然後分治處理每一個區間,rmq找最大值,並算出合法的左右邊界

coedforce #441 Div2不詳細解題報告