Problem
找一個最大箏形於給定的地圖中。
Sample Input
|
|
Sample Output
|
|
Solution
其實很像找一個最大正方形,可以參考 NPSC 營地的作法。而要求箏形事實上就是將地圖翻轉 45 度角。
參考 UVa 10593 - Kites 的做法可以完成。
以前寫的 代碼 真是萌哒。
|
|
找一個最大箏形於給定的地圖中。
|
|
|
|
其實很像找一個最大正方形,可以參考 NPSC 營地的作法。而要求箏形事實上就是將地圖翻轉 45 度角。
參考 UVa 10593 - Kites 的做法可以完成。
以前寫的 代碼 真是萌哒。
|
|
上述總共有四種指令架構,分別輸出前三個指令的 X 總和值。其中第四個為迴圈架構。
|
|
|
|
由於輸入沒有迴圈,差點忘了有 repeat 指令。遞迴讀進輸入即可。
|
|
將 S(1) … S(n) 加總後 mod 1000000009 輸出。
|
|
|
|
特別發現到 1000000009 是質數,對於任意一個數字都存在乘法反元素,那麼將總和定義為
$(1 + 2 A[0])(1 + 2 A[1])(1 + 2 A[2]) ... (1 + 2 A[n])/2 \text{ mod } 1000000009$/2 部分利用乘上 2 在 mod 1000000009 下的反元素即可。
|
|
類似 UVa 10304 - Optimal Binary Search Tree,給每個節點的拜訪頻率,建造一個二元樹,使得詢問次數最小化。
|
|
|
|
套用四邊形不等式進行優化。
|
|
類似 UVa 10720 - Graph Construction,給一個無向圖的每一個節點 degree,請問是否能構成圖。
|
|
|
|
使用公式加二分。
|
|
給一個序列 A,請問在 A[l:r] 中 A[i] 不被 A[j] 整除的個數為何。
|
|
|
|
首先先貪心 A[i],找到左側最鄰近的因數、右側最鄰近的因數的位置找出 L[i], R[i]。
以下使用 binary indexed tree 進行區域操作。
然後對於詢問 [l, r] 事先讀進來,加入掃描線算法,確保能夠詢問 [l, r] 時,找尋 BIT[r] 的值為何。
掃描時,當我們遇到某個因數所展開的區間 [L[i], R[i]] 的左端點
因此資料結構要維護
|
|
找到 Ax + By + Cz = P, 給定 A, B, C, P,要求 (x, y, z) 有幾組解,並且 x >= 0, y >= 0, z >= 0。
|
|
|
|
看一下數據範圍 0 < A, B, C, P <= 100000000,C / gcd(A, B, C) >= 200,後者是強而有力的條件,肯定 z 情況最多 100000000/200 = 500000 個可能,窮舉 z 的情況,用擴充歐基里德找到 Ax + By = (P - Cz) 的解個數。
|
|
在一個迷宮中有 M x N 個房間,每個房間有四個門,並且以逆時針的順序依次出現,每一個時間每個房間只會有一個門通往另一個地方。
必須從左上角開始,花最少時間收集到 K 個寶物後抵達右下角。
|
|
|
|
分析狀態,由於 K 不大,直接 2^K 狀態下去,而只會有四個門,因此時間論替只需要考慮 mod 4 的結果,最後 dist[x][y][4][1<<8]
抵達 (x, y) 時的門狀態、同時身上帶了多少寶物 (用 bitmask 去壓縮)。
BFS 一下就過去,記得要注意可以在同一個房間內等待下一個時刻。
|
|
現在有 n 個堆,位於位置 xi 的堆重量 wi,對於每一堆可以移動到位置大的地方,移動的成本為(xj - xi) * wi
,請問集中 k 堆的最少花費為何。
|
|
|
|
dp[i][j]
: 表示放入 i 堆,集中 j 堆的最少花費
|
|
將公式調整為上述結果,會發現我們依序帶入的 X[i] 遞增,也就是斜率會越來越高,要使後半部常數越大越好,保證此線會相交於凸包的頂點上。
凸包點 (sumW[k], dp[k][j-1] + sumXW[k])
|
|
給 n 個點趨勢圖,可以選擇忽略某些點,忽略的點會被剩餘點補上靠左。
請問要恰好 k 個 peak 的情況,有多少不同的趨勢圖貌。這別要求兩個相鄰的點不可以有相同 y 值。
|
|
|
|
TLE 版本,答案是正確的。 O(n^2 m)
其實這有點接近貪心作法,狀態為 dp[i][k][3]
表示加入第 i 個點,產生 k 個 peak,並且下一次要接 y 值較高、較低、等於的點。
而考慮當前 k 個 peak y[i],對於三種高地要求,我們只會轉移到不同的 y 值,也就是對於後面如果存有 y[p] = y[q], p < q,盡可能選擇 p 小的,否則會重複計算,要忽略 q 大的。
從下面樸素算法中,可以獲得基礎的遞迴公式。
|
|
使用 binary indexed tree 優化 O(nm log n)
使用前綴總和來完成狀態轉移。為了防止相同 y[p] = y[q], p < q
,由於會先拜訪到 p 進行狀態轉移,特別考慮 y[q] 基底的轉移狀態必須被扣除 y[p] 的結果。
|
|