Problem
有一個凸多邊形的餅乾要沾牛奶,但是杯子的深度有限,最多沾 h 高,而最多拿 k 個邊去沾,請問最多沾到的面積為何?
Sample Input
|
|
Sample Output
|
|
Solution
最多只有 20 條邊,因此窮舉 C(20, k)
然後計算沒沾到沾到的最小面積為何。藉此得到最大沾有面積為多少。
沾到的面積計算採用半平面交的方式。如果使用該邊去沾牛奶,則將此邊往內推根據法向量內推 h 距離。
|
|
有一個凸多邊形的餅乾要沾牛奶,但是杯子的深度有限,最多沾 h 高,而最多拿 k 個邊去沾,請問最多沾到的面積為何?
|
|
|
|
最多只有 20 條邊,因此窮舉 C(20, k)
然後計算沒沾到沾到的最小面積為何。藉此得到最大沾有面積為多少。
沾到的面積計算採用半平面交的方式。如果使用該邊去沾牛奶,則將此邊往內推根據法向量內推 h 距離。
|
|
有一個軍事基地在叢林深處隱藏,基地將會由 n 個塔台包圍保護。並且只能保護其凸包內的所有地區。
敵人可以摧毀一些塔,使得保護區的保護範圍縮小,使得基地給暴露出來。
在萬無一失的條件下,希望將基地建造在敵人需要摧毀最多塔台才能基地所在地。
|
|
|
|
二分需要摧毀的塔台數 K,由於敵人最多摧毀 K 個塔台,就能將基地給找出來,也就是說任意炸掉連續區段的塔台,他們所產生出來的交集是存在的。如果沒有存在交集,則基地可以藏在那裏面,不管敵人怎麼摧毀都找不到基地在哪。
為什麼需要連續呢?分段結果肯定不好,涵蓋的面積也少,同時會被連續 K 的情況給包含,所以不用考慮分段。
N 很大,半平面交的誤差也很大。
|
|
給一個逆時針順序的凸多邊形,找一個內接最大圓。求出最大半徑為何。
|
|
|
|
二分半徑 r,如果內側放置一個圓,則保證每一條邊到圓心距離都大於等於 r。
藉此嘗試將每一條邊往內推,計算半平面交集是否存在,往內推根據法向量內推 r 距離。
求半平面交需要 O(n log n)
,二分又有一個 log k
,所以效率必須是 O(n log n log k)
。
關於是否需要半平面交還有一個擴充,由於這題不求半平面結果,單純詢問有交集與否,可以利用 2D randomized bounded LP,隨機順序放置半平面,維護最下方的最佳解,如果不存在就 O(n)
建立 (不存在的機率 1/i,因此 O(n)/n = O(1)
),可以在 O(n)
完成,這麼一來速度也許還能再更快些。有空再來實作。
|
|
在 N 個城市,每個城市都要每月的基礎花費,而在城市之間有 M 條邊,市長安排在邊兩側的城市其一要負責維護這一條重要邊,而重要邊的維護花費為該邊移除後,導致任兩個城市之間無法相連的對數乘上該路長。
只需要將一條邊交給相鄰的其一城市維護即可,因此會將該城市的月花費上升,求一種分配方案使得城市的最大花費最小。
|
|
|
|
首先,重要邊只有 bridge 需要維護,除了 bridge 外,不會造成任兩個點之間不連通的情況。
因此將所有 bridge 求出,建造出森林 (很多棵 tree),接著二分最大花費,然後用貪心算法驗證答案是否可行。貪心的步驟採用先把葉節點的花費最大化,如果無法將維護成本放置到葉節點,則必然需要將維護成本交給其父節點,然後將所有葉節點移除。持續遞歸檢查。
當然可以選擇對每一個樹二分最大花費,取最大值即可。這麼寫要看當初怎麼設計,否則會挺痛苦的。
|
|
現在要購買股票,每一個股票都有其花費和預期的在未來的出售價格。
但是股票採用組合包的方式進行販售,但是每一種組合包都只能購買一次,請問在資金只有 C 元的情況下,最多能在未來淨利多少。
|
|
|
|
每個東西只能購買一次,可見是一個 01 背包問題,但是由於 C 很大,也就是背包容量過大,導致 DP 上的困難。
但是題目並沒有特別說明測資的特殊性,後來才得知可以用 gcd 最大共同因數去降,就是縮小幣值,相當於換外國幣去思考。這麼一來 C 可以降很多,但在一般的背包問題中,gcd 的效應並不高。
把我的純真還回來啊,不想自己 yy 測資特殊性。
|
|
一個可以行走在靜止水面上的蜘蛛,現在要靠近瀑布,瀑布會於鄰近周圍會產生流速。
蜘蛛最多可以在 P 速度的水面上前進,請問最近可以靠近瀑布多少。現在已知從靜止水面靠近瀑布的部分流速,在未知的部分根據觀察是前面單位距離 1 距離 2 的線性關係。$v_{i} = a v_{i-1} + b v_{i-2}$)
|
|
|
|
其實這題不難,在最後已知得部分解二元一次方程式即可,把未知的流速算出來,統計可以跑多遠即可。
一開始看不懂題目,以為所有流速都是線性關係,求出來的答案怪怪的。從最後已知的四個流速推測剩餘流速。
|
|
平面上有士兵和戰車,分別有 S 個、T 個,接著會有 Q 組詢問,每組詢問有三條線,每組詢問之間的線保證斜率會彼此相同 (只是移動線,這需求非常奇怪。),請問三條線拉出的 7 個區域中,中間與外側三塊地士兵、戰車個數差異為何?
|
|
|
|
先獲得需要劃分的斜率,對三種斜率進行點的排序,因此對得到六個排序結果 (士兵和戰車)。之後就能在排序結果中,二分搜尋該線的左側、右側分別有多少點。
解決這個之後,要來看看噁心的排容原理,這裡還是建議參照 flere 的圖示:
對於拉出的三角形三個交點編號 A, B, C,接著對其做區域編號,
(1) BC 線段的左邊 有區域 1 2 3 6
(2) AC 線段的左邊 有區域 2 6 7
(3) AB 線段的下面 有區域 2 3 4
(1) - (2) - (3) 就可以得到區域 1 - 2 - 7 - 4
就是我們要的答案
在程式邏輯上,挑一點與其一線同側,另兩條線與點異側。
沒有辦法單獨對區域內部搜尋點個數,然後統計完再相減,即使使用 range query,也無法在有效時間內完成任意三角形的範圍搜索 (矩形可以考慮,用等腰直角三角形也好。)。
|
|
給 N 個城市,城市之間會有 M 條當前的安全邊,在其餘邊皆有邪惡組織出現,來阻擋城市之間的運行。
現在人在編號 1,每次將隨機挑任何相鄰的城市走過去 (隔天又會再挑一個鄰近的城市),如果走過去的路上遇到邪惡組織則會將其殲滅,請問期望值需要幾天才能將 N 個城市彼此之間都存有連通路徑。
|
|
|
|
特別小心輸出的誤差要在
1e-6
,以為只需要輸出 1 位,結果一直 WA。
事實上,將狀態壓縮成每一個連通元件的節點個數,對於連通元件之間做拉邊即可。
對於狀態 u, v,期望值 E[u] = 1 + E[v] p + E[u] q,
E[v] * p
表示:將兩個不同連通元件之間拉邊,則會將兩個連通元件融合,機率 p。E[u] * q
表示:在各自的連通元件內布拉邊,不影響狀態結果。
左移一下得到 E[u] = (1 + E[v] * p) / (1 - q);
這一題必須考慮現在位於哪個連通元件,所以特別標記狀態的第一個連通元件為當前所在位置。
|
|
任挑三個點拉出三角形,三角形內部的點數期望值為何?
|
|
|
|
反過來寫,這一點會被多少個三角形包含住。
為了要計算這一個點 P 被多少三角形包含住,把這個點 P 當作基礎點,對其他點做極角排序。排序完套用極角掃描線算法,對於當前線上的點 Q,往回追溯 180 度內,任挑兩個點與其並成三角形,保證不包含 P。
那麼要得到包含 P 的就反過來用全部組合扣到不包含的結果。
因為要窮舉每一點做極角排序,作法會在 O(n^2 log n)
。
|
|
將一個簡單多邊形三角化,並且讓最大面積的三角形越小越好。
|
|
|
|
矩陣鏈乘積的方式著手 dp。
在此必須檢查劃分兩區間的三角形中內部不包含任何點,這裡利用外積 cross 進行計算。
|
|