Problem
給予一堆相同長度的 ATCG 構成的基因,找一段字典順序最小的基因,使得與給定的基因漢明碼距離(有多少位置不同)總和最小。
Sample Input
|
|
Sample Output
|
|
Solution
對於每一個位置,找到字符使用最多次的使用,這樣將可以將此位置的漢明碼距離縮到最短。
最後討論一下相同時所需要的最小字典順序,即可完成。
|
|
給予一堆相同長度的 ATCG 構成的基因,找一段字典順序最小的基因,使得與給定的基因漢明碼距離(有多少位置不同)總和最小。
|
|
|
|
對於每一個位置,找到字符使用最多次的使用,這樣將可以將此位置的漢明碼距離縮到最短。
最後討論一下相同時所需要的最小字典順序,即可完成。
|
|
找一個數字 M 介於 [A, B]
之間,且中間的 substring 包含 N 的個數為何。
|
|
|
|
建立一個 AC 自動機,使用傳統的 AC 自動機 dp,每一個節點當作一般 AC 自動機的走訪,並且猜測下一步的所有匹配符號。
為了要卡住上限,增加經過的狀態是否一直為前幾次臨界上限,若一直在上限,則搜索範圍將會被限制。
|
|
紳士們上小便的時候,彼此之間會隔著 K 個小便斗 (空著人的小便斗),請問當有 N 個一排的小便斗,請問壅塞個數的期望值為何 (一次平均可以多少人上小便)。
|
|
|
|
狀態紀錄 dp[i]
表示 i 個一排的小便斗的壅塞期望值。
現在考慮最後一個進入的人所佔的位置 p
,則期望值會等於 1 + dp[p-K-1] + dp[i-(p+K)]
,分別為左側和右側的期望值,儘管左右兩側狀態也會對邊界有空隙 <= K,但是放入之後與 p 之間空隙最 <= 2K,也塞不下其他人 (至少要 2K + 1)。
由於最後一個人的情況有 i 種,每一種的機率都相同,因此推導結果為 dp[i] = 1 + (dp[1] + dp[2] + ... + dp[i-k-1])/i
。
|
|
給 N 個區間 [l, r]
,每一次挑選一個區間 [a0, b0]
,接著可以找到另外一個區間 [ai, bi]
被 [a0, b0]
完全覆蓋 (a0 < ai < bi < b0),接著再對這個區間 [ai, bi]
再找一個被完全覆蓋的區間 [ai+1, bi+1]
如此迭代下去,當作一次操作。
請問至少要幾次,才能將所有區間挑選完。
|
|
|
|
對右端點進行遞增排序,對左端點進行次遞增排序,接著進行掃描算法,每一次放入的區間盡可能被之前的區間包含住,否則將會增加一次操作,也就是說要找盡可能接近的左端點來符合放入的區間。
這個操作方式,非常接近 O(n log n)
LIS 的思路。
|
|
給一棵樹,每次覆蓋不重疊的路徑,將路徑上的權重平均得到此次花費,目標覆蓋所有的邊,加總花費最小化。
|
|
|
|
對於每一種狀態作紀錄,然後對於尚未使用過的邊作 bitmask,每次移除一條路徑上的結果。
// 後來發現似乎可以直接轉成有根樹,進行樹形 dp,真是失策。
|
|
一個山峰高度 h[i]
如果算是突起,則必須符合
h[i] - 150000
的可能
|
|
|
|
維護一個遞增的單調堆,而第二個元素存放掃描時經過的最低點。然後從左往右掃一次、再從右往左掃一次,分別得到每一個點往左、往右找到最高峰的情況。
|
|
給一張圖,問有多少對 (u, v) 沒有連通路徑。
|
|
|
|
只需要找到每個連通元件的大小即可,連通元件之間的點是無法存有路徑的。
|
|
給水位消長的情況,請問有有多少塊地經過溼乾的次數大於等於 K。
|
|
|
|
先對地面高度作一次排序,來確保每一次消長會將一個區間的所有元素都 +1
。
用 binary index tree 維護區間調整,單點查詢。
[l, r]
都加上 v,則對於前綴對 A[l] += v
, A[r+1] -= v
這樣保證前綴和不影響其結果。= sum(A[1, l])
|
|
給一張 N 個點的圖,問任意兩點之間的最大化最小邊。
|
|
|
|
先將圖縮成最大生成樹,然後使用 tarjan 作離線的 LCA 詢問。
接著詢問在樹上進行即可,因此每次詢問最慘會到 O(n)。
那我們稍微加速,採用 dp 的方式,將樹變成有根樹,記錄每一個節點向上攀升 1 個節點, 2 個節點, 4 個節點 …, 2^n 個節點的路徑上的最大最小值。
因此狀態會是 O(n log n), 建表也能在 O(n log n) 完成,接著調整兩個詢問節點的高度,先想辦法調整到兩個節點到水平高度,藉由之前的計算,高度不超過 n,因此理應可以在 O(log n) 時間內完成到調整到同一水平高度。
這題跟 UVa 12176 - Bring Your Own Horse 相當相似。
|
|
長度為 n (保證為 5 的倍數)個對列,小公車長度為 5,種類有 K 種,大公車長度 10,種類有 L 種,請問排列的方法數有多少種?
|
|
|
|
推導公式如下
$A_{n} = K * A_{n-1} + L * A_{n-2}$考慮塞入最後一台車的類型,找到遞迴公式。之後將其變成線性變換的結果。
$$M = \begin{bmatrix} K & 1 \\ L & 0 \end{bmatrix} \\ M^n = \begin{bmatrix} A^n & A^{n-1} \\ A^{n-1} & A^{n-2} \end{bmatrix} \\$$
|
|