Problem
給一張圖有 N 個節點、M 條邊,其中要放置 S 台新主機於其中 S 個節點,而沒放置的節點繼續使用舊主機,為了服務舊主機的網咖,每個舊節點旁邊最多只能有一個新主機網咖。
請問有多少種放置方法。
Sample Input
|
|
Sample Output
|
|
Solution
對於每一個節點的連接方式用一個 32-bit 壓縮,接著窮舉所有可能放置方法 state,對於沒有放置的節點,直接壓縮結果與 state 做 AND 運算,算 bits 數是否都小於 2。
|
|
給一張圖有 N 個節點、M 條邊,其中要放置 S 台新主機於其中 S 個節點,而沒放置的節點繼續使用舊主機,為了服務舊主機的網咖,每個舊節點旁邊最多只能有一個新主機網咖。
請問有多少種放置方法。
|
|
|
|
對於每一個節點的連接方式用一個 32-bit 壓縮,接著窮舉所有可能放置方法 state,對於沒有放置的節點,直接壓縮結果與 state 做 AND 運算,算 bits 數是否都小於 2。
|
|
好比 2D 方格,從左下角到右上角的方法數。而這一題是在三維空間,一樣的方式要越來越靠近右上方的頂點,但是部分點會有障礙物,會造成無法通行。
題目給定的維度事實上是終點座標,而非該維度數,用 row major 的時候要計算 dim[i]+1
。
|
|
|
|
特地用懶標記完成 dp 計算,但是忘了有可能無法抵達終點,忘了補上最對於終點的懶標記操作,直接輸出 dp[ret]
結果一直噴 WA。
懶標記檢查 if (used[ret] != testcase) dp[ret] = 0;
。
|
|
給定一個 N x M 地圖,已知有部分的牆壁和一個透明的牆壁,每一個障礙物都佔據一個方格,而透明牆壁一開始不知道位於何處,直到碰壁的時候才發現,找一條最慘情況下的最短路徑。
|
|
|
|
最小化最大值,首先窮舉任何一個透明牆壁可能出現的地方,對於透明牆壁的鄰近四格建立再碰壁方向下,抵達終點的最短路徑。
接著,使用最短路的方式進行更新,在這裡使用 dijkstra 的方式,對於每一個點的狀態為 (走到這裡第幾步) = 從起點走到這,最慘的偏移路徑最小化
為何。
概念上理解,設計一條路徑,路徑畫好後,對於每一點賭下一個點就是透明牆壁,偏移路徑長最長為何就會是該路徑的花費。
|
|
現在有一台馬車繞行一個圓,馬車內側輪胎畫出小圓、外側畫出大圓,現在知道馬車內側與外側輪胎之間的距離 D,同時知道內側輪胎每滾一圈,外側輪胎會滾 N 圈,請問外側輪胎畫出來的圓周長為何?
|
|
|
|
感謝峻維兄熱心翻譯
假設內側輪胎畫出小圓半徑為 A,兩個輪胎的半徑 B
$$\frac{ \frac{ 2 \pi A}{2 \pi B} }{ \frac{2 \pi (A + D)}{2 \pi A} } = N \\ \Rightarrow A = \frac{D}{N-1}$$所求為 $2 \pi (A+D)$
|
|
有大中小三種類型的果醬瓶在三層的架子上,每一層有不同個數的果醬瓶。但是知道每一層的總果醬體積,反求大中小果醬瓶的容積。
|
|
|
|
三條方程式,三個變數。可以直接套克拉馬公式,殺雞用牛刀使用高斯消去求解。
|
|
有五個人要測體重,倆倆上去秤得到體重總和為何,現在反推每個人的體重為多少。
|
|
|
|
這題跟 10202 - Pairsumonious Numbers 一樣。
如果將體重、總和排序後 A[]
、SUM[]
,保證最小的 A[0] + A[1] = SUM[0]
,和 A[0] + A[2] = SUM[1]
但是不曉得 A[0] + A[3]
和 A[1] + A[2]
哪個小,因此窮舉 A[1] + A[2]
的結果。
每一次窮舉,可以解出前三小的值,之後就能依序推出所有結果。
|
|
軍隊筆直等速度移動,隊伍長度 L,信使位於隊伍最後面,要傳遞訊息到隊伍前方後跑回隊伍末端。跑回末端時候,隊伍已經前進 L 距離。求信使跑的距離為何?
|
|
|
|
假設軍隊移動速度 $v$, 信使移動速度 $u$。
看時間
$$\frac{L}{v} = \frac{L}{u-v} + \frac{L}{u+v} \\ u^{2} - v^{2} = 2v, \\ \text{Let u = 1, get } v = \frac{-2 + \sqrt{8} }{2}$$輸出 $\frac{L}{v} u$ 即可。
|
|
給定一個無向圖,每一個頂點由大寫字母表示,找到從起點到終點,並且經過所有點 (每一個點最多經過一次) 的路徑,輸出最小字典順序的路徑。
|
|
|
|
一開始想說點數最多才 15,根據 D&C 的作法,拆分成兩塊 (分別有 N/2 個點),其中一塊從起點開始、另一塊以終點結束的路徑。隨後再把兩塊組合在一起,找字典順序最小即可,看來是測資太多,很容易就 TLE,不過這方法是最穩定的,建表最慘需要 O(2^15 * 7!)
。
由於可行狀態太多,也就是好死不死給一張接近完全圖,那上述的算法會超慢,如果要計算方法總數可能才會用到上述解法。而這一題直接 dfs 搜索,並且確保每一步走下去時,剩下的節點會在同一個連通元件上,不會拆分成兩塊。
|
|
在三維空間中有 N 位仙女,突然間被攻擊者定住,而攻擊者可能在這三維方體中任何一點出現,出現時會攻擊最鄰近的仙女,請問每名仙女被攻擊的機率為何?
|
|
|
|
很明顯地是一個 3D Voronoi,但是要處理 3D Voronoi 還不太行,根據 DJWS 筆記中寫道,應該使用 O(N N log N)
的做法,窮舉一點與其他點之間拉出來的半平面交,計算半平面交的面積佔有多少。
但這一題是 3D 情況,也就是說半空間交,找到凸殼之後計算其體積,因此沒有單純的半平面交這麼簡單。
如何做到半空間交目前沒有想法,但是利用蒙地卡羅算機率還算可行,每一筆測資限制窮舉次數在 800 萬內即可通過。
由於 N 很小,也想過窮舉一點之後,拉出半空間的所有情況,任三面交一點,若該點在半空間中都符合,則保留於後面處理。得到所有點集,拿來做三維凸包,之後計算體積。關於三維凸包 (凸殼) 計算體積,內部戳一點,對於所有面會形成錐體,把所有錐體體積加總即可。
也許 DJWS 的作法是正確的,但是目前不知道如何做到半空間交。不知道要怎麼繞行算法。
關於 2D 的題目,請參考 zerojudge b358. 竹馬不敵天降
|
|
類似倉庫番遊戲,必須將箱子推到指定的按鈕位置,才會開啟逃離門,每一次可以走一步,如果箱子在旁邊,則人與箱子會同時往同一個方向移動。求逃離最少步數。
在還沒有打開門之前,門就相當於障礙物存在,不能經過。
|
|
|
|
反例輸出有誤,把 No Way!
拆成兩行送出結果拿到 WA。
把人的位置和箱子位置記錄成一個狀態,得到 dist[sx][sy][bx][by]
進行 bfs 搜索即可。特別小心不可經過尚未開啟的門問題。
|
|