Problem
給三個圓,它們彼此之間的內公切線會構成一個三角形,現在給定三角形的三邊長,請問灰色扇形面積為何。
Sample Input
|
|
Sample Output
|
|
Solution
模擬三角形三個點座標,三個圓座標分別坐落於兩兩外角的角平分線上,算出圓心之後就能找到扇形面積。
|
|
給三個圓,它們彼此之間的內公切線會構成一個三角形,現在給定三角形的三邊長,請問灰色扇形面積為何。
|
|
|
|
模擬三角形三個點座標,三個圓座標分別坐落於兩兩外角的角平分線上,算出圓心之後就能找到扇形面積。
|
|
給你兩個三維空間的射線,請問它們的最近距離為何。
|
|
|
|
三分時間,因為射線的速度不一致,目前還沒有想到好的數學解。
|
|
現在有 2 個 team,每個 team 至少一個成員,同一個 team 成員之間必然會互相認識,不同 team 的成員之間則不一定。
給定他們互相認識的關係圖,請問他們可以分屬的 team 的情況,並且輸出 team 人數差距最少的那一組。
|
|
|
|
對於不認識的兩個人,保證他們在不同的 team。
取補圖,建造相互不認識的兩個人的關係圖,對於每一個 component 做二分圖判定,找到每個二分圖的兩個集合大小。
對於每一個二分圖結果,使用背包問題的解法,將兩個 team 的總數劃分均勻。
|
|
N 個城鎮之間一開始有一些邊相連,接著每次任挑兩個城鎮拉一條邊相連,請問期望值需要幾次才能將 N 個城鎮彼此相連成為一個連通元件。
原本彼此連通的城鎮,也有可能重複拉邊。
|
|
|
|
事實上,將狀態壓縮成每一個連通元件的節點個數,對於連通元件之間做拉邊即可。
對於狀態 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)
;
|
|
|
|
|
|
怎麼想都沒有好的思路,最後還是用多次區間查找來完成這個最小值詢問。
每一次查詢區間 [0, Y - 1]、[Y, 2Y - 1]、[2Y, 3Y - 1] … 的最小值。
因此每一次會需要詢問 O(500000 / Y * log (500000)),當 Y 夠大的時候,效率會比直接搜索來得快,如果 Y 太小則直接搜索的效果會比較好,因為增加的數字 X 最多 40000 個。
閥值 5000。
|
|
基因對齊的最大匹配問題,或者是說 minimum edit distance,最小編輯距離。
花費方案
-
獲益 -1,也就是 -----
= -1、a--b--c
= -2a
- a
獲益 2。a
- b
獲益 0。 (這一個對法,題目沒有講,因此很容易掛 WA。)
|
|
|
|
狀態 dp[i][j][a_str or b_str][prev gap/ no prev gap]
先將 a, b 反轉,靠右對齊不是重點!
考慮 a 字串 i 位置匹配到 b 字串 j 位置,然後考慮尾端的狀態,要不兩個都是字符,要不其中一個是 -
產生的 gap,而這個 gap 可能在 a 字串或者是 b 字串,如果已經存在 gap,放置時則不需要花費,反之額外增加花費。
|
|
给定一个连通图,设置一个些安全点,使得其他任意一些节点崩塌后,其他点都能到一个安全点,问安全点最小数量和情况数
|
|
|
|
先找到所有割點,而一個連通元件上可能連接好幾個割點,對於這個連通元件而言,不論割點是否崩塌,它們仍然可以通到其他連通元件上的逃生口。
如果這個連通元件只有一個割點,則萬一割點崩塌,則連通元件中至少要有一個逃生口,而方法數就是 component.size(),因此會發現,只需要將只有一個割點的連通元件的方法數相乘即可。
對於沒有割點的連通元件而言,至少要設置兩個逃生口,只有一個逃生口會造成萬一逃生口崩塌而死掉的情況,特別考慮方法數 component.size() * (component.size() - 1) / 2。
|
|
在一個沙漠中,有 N 個綠洲,每一個綠洲只有水源可以獲取使用,食物可以從起點城鎮帶過來存放,但是綠洲本身不帶有食物獲取,每走一步將會損耗單位水和食物,身上負重最多 W,你可以攜帶一部分食物放置在綠洲,然後走回起點再帶食物過來存放,要推進到終點,至少要從城鎮中購買多少食物。
|
|
|
|
很簡單想的,我們只能從終點逆推回來,我們考慮綠洲 u 到終點 end 的最少食物花費 cost_u,現在考慮從 v 點到 u 再到 end,如果 cost_u 加上 e(v, u) 的花費不超過負重,則可以得知直接從 v 攜帶 cost_u 的食物量。
如果 cost_u 太大,則表示必須來來往往於 u, v 之間,而每一趟 v->u->v,攜帶路徑花費 1 倍水、 2 倍食物 (在 u 那邊打水即可),剩下的空間為一次運送的食物量 (放置在 u 儲存)。最後一趟,則不考慮回程,額外可以增加攜帶食物量。
|
|
給一個環狀的蜂巢式地圖,上下沒有包裹,只有左右是相連的。現在在某一個蜂巢中放置特殊藥水,走到那個放置處喝下,之後所需要的花費都會砍半。求某點到某點的最少花費。
|
|
|
|
類似最短路徑,不過狀態為 dist[N][2]
是否已經經過放置藥水的地點,隨著 spfa 更新即可。關於蜂巢地圖,直接根據奇偶數 row 分開討論即可。
|
|
總共有 a, b, c, d 四種類型的燈泡,現在給予一些組合包的價格和各自內有四種類型的燈泡數量,現在要求購買指定個數以上的方案,求最少花費。
|
|
|
|
這一題不外乎就是整數線性規劃,很明顯地是一個 NPC 問題,所以就兩種策略強力剪枝、背包問題。
關於強力剪枝,大概是當年解決問題的方法,因為題目沒有特別說明數據範圍,用背包問題是相當不方便的,我也搜索不到當年 WF 的 code,所以測試一下數據範圍,發現將四種類型燈泡需求相乘結果不大於 100 萬。
藉由這個條件,將狀態訂為 dp[a_size][b_size][c_size][d_size]
的最小花費為何,但是可能忽大忽小,所以自己定義 row major 來完成。嘗試將每一種組合去迭代找最小值,中間過程要記得取 min bound,以免越界。
|
|