1. 程式人生 > >ZROI 部分題目題解

ZROI 部分題目題解

ZROI 部分題目題解

335

首先發現一個性質:

對於最短的邊而言,所有點的路徑如果經過了這條邊,那麼路徑的權值就是這條邊的邊權(廢話)

那麼我們把最短的邊拎出來,可以發現,博物館確定時,每個點按照路標所指方向走一定會經過最短的邊或者一定被最短的邊的某個端點經過

簡單的說,令某一條最短的邊的某個端點出發的某一條路徑組成的集合為 \(S\),每個點出發的路徑,要麼包含某一條最短的邊,要麼被 \(S\) 中的某一條邊包含

我們把每條邊的權值減去 \(w\),其中 \(w\) 表示最短邊的長度

那麼題目轉化為最小化一條鏈的權值和,這條鏈滿足終點是博物館,起點是某條最短邊(也就是現在邊權為零的某條邊)的某個端點,並且這條鏈不經過零邊

如何最小化一條鏈的權值和?我們考慮從某條最短邊的某個端點開始在鏈上走,假如經過三條邊 \(a,b,c\),滿足權值 \(w_b \gt w_c\),那麼可以發現,設 \(a=(u,v),b=(v,x)\) ,我們選取 \((u,x)\) 代替 \(a,b\) 一定不會更差,所以這條鏈上的邊權基本是遞增的

所以說這個鏈的權值基本上就是每條邊的權值和

但是存在一個問題,就是 \(a\) 不存在的時候,也就是第一、二條邊,這個並不能保證順序,所以我們給每個點訂一個初值,

(當時就寫到上面那裡,然後就忘了寫了。。。)

503

首先把 \(\frac{(A_i - A_j) B_i B_j}{2A_iA_j}\)

化簡,令 $C_i = \frac {B_i} {A_i} $,那麼就有 \(\frac{(A_i - A_j) B_i B_j}{2A_iA_j} =\frac 1 2 (B_iC_j - B_jC_i)\)

發現右邊那個東西是叉積,等價於把 \((B_i, C_i) ,(B_j, C_j)\) 放在平面直角座標系裡,這兩個點與原點組成的三角形的有向面積

那麼題目變成求一個上凸殼 + 一個下凸殼

單調佇列維護一下即可

504

設最優解為 \((l_1, r_1, x_1), (l_2, r_2, x_2) \dots(l_k, r_k, x_k)\) 表示把 \(l_1\)\(r_1\)

加上 \(x_1\)\(l_2\)\(r_2\) 加上 \(x_2\),……

那麼不難發現 \(l_i\) 互不相同,因為可以將 \((l,r_1,x_1)\)\((l, r_2, x_2)\) 變成 \((l, r_1, x_1 + x_2)\)\((r_1+1, r_2, x_2 - x_1)\) (這裡假設 \(r_2 \geq r_1\))

首先發現區間不好做,我們通過差分把區間加變成單點加

首先令 \(a_i\) 表示第 \(i\) 個元素距離 \(7\) 的倍數差多少,然後把 \(a\) 差分一下

現在問題變成了求最少的運算元,每次操作是選一個位置 \(+x\),另一個位置 \(-x\) (可以不選)

注意這裡沒有順序要求,完全可以在後面的一個位置上 \(+x\),在前面的一個位置上 \(-x\)

而且 \(-x\) 等價於 \(+(7-x)\)

所以可以先貪心地將 \(x\)\(7 - x\) 進行匹配,因為一次操作隻影響兩個位置,最優的操作也只能消去兩個位置,所以貪心沒有問題

現在變成了一堆數,這堆數最多有三種,1和6中有一種,2和5中有一種,3和4中有一種,每次操作取出一個數,然後把任意另一個數減去這個數,直到所有數都為0為止,問最小操作次數

發現答案最劣為數的個數,那麼和數的個數差多少呢?就是某些數可以被其他的數之和給消掉,也就是說,每一組數,這組數的和為 \(7\) 的倍數,就可以讓答案減去1,所以我們變成了把這堆數分組,看最多能分出多少和為 \(7\) 的倍數的組

顯然這種組裡面每個數出現次數不會超過 \(6\),否則一定能拆成兩個組(廢話),而最多有三種數,所以可以 \(7^3\) 預處理所有組,然後令 \(f[i][j][k]\) 表示三種數分別有 \(i,j,k\) 個的時候的答案,\(dp\) 一下即可,複雜度看似 \(O(n^3 \times 組數)\) 過不去,實際上由於 \(i + j + k <= n\) 並且 \(i,j,k\) 的和是已經消去一些數之後的答案,而且因為每一組的和必須是 \(7\) 的倍數,所以組數和 \(7^3\) 差距甚遠,一般只有幾十,所以常數實際上非常小(極限資料大概跑0.6s)

505

分塊暴力大法好!

因為修改對某一組的詢問的影響顯然可以 \(O(1)\) 計算,所以可以分塊暴力

就是令塊大小為 \(m\),然後每修改塊大小次的時候就 \(O(20 n)\) 暴力重構,詢問的時候就用答案加上每一次修改對其的影響,複雜度 \(O(\frac {20n^2} {m} + nm)\),由均值不等式,取 \(m = \sqrt {20n} = 1414\) 時,可以做到 \(1e8\),而且常數幾乎為 \(1\)

正解是樹狀陣列維護係數?沒搞懂。。。