Problem
每個變數皆為正整數,給定一個算術表達式和變數之間的大小關係,請問最少產生出來的答案為何。
Sample Input
|
|
Sample Output
|
|
Solution
先使用 spfa 找到根據 greedy 策略分配的變數值,如果發生負環情況直接輸出 -1
。
然後使用矩陣鏈乘積的 DP 方法進行找到最小答案。
|
|
每個變數皆為正整數,給定一個算術表達式和變數之間的大小關係,請問最少產生出來的答案為何。
|
|
|
|
先使用 spfa 找到根據 greedy 策略分配的變數值,如果發生負環情況直接輸出 -1
。
然後使用矩陣鏈乘積的 DP 方法進行找到最小答案。
|
|
將棋子移動到可以形成萬里長城,也就是說移動到同一行、或同一列、或其一對角線上。
求移動得最少步數。
|
|
|
|
窮舉要移動到哪裡,然後找完美匹配的最大權重 - KM 算法。
只要將移動步數弄成負權重套上去 KM 即可。
|
|
現在 pizza 上有 m 個橄欖,請問是否能均分 m 塊,使得每一塊皆有一個橄欖。
|
|
|
|
窮舉其中兩個相鄰橄欖中的所有分割點,檢查一下即可。
稍微估價一下,點多窮舉次樹就少,點少切割成功的機率就高,所以算法總不會太差。
|
|
給兩棵樹,請問將兩個樹用一條邊連起來,則獲得新的一棵樹的最長路徑期望值為何。
|
|
|
|
利用 dp 方法,找到通過點 v 的 (以 v 為路徑端點)最長路徑為何,以及兩棵樹分別原有的最長路徑為何。
接著考量是否加入新一條會成為最長路徑,也就是說會通過新增加的邊。分別對每個樹的節點構成的最長路徑做排序,接著窮舉連接的點,用二分搜索找到另一個樹的節點,能夠使之成為更長的最長路徑。
|
|
某 M 正與學姊討論蘿莉控追小海女的故事。
某 M 喃喃自語 …
『用了暴力法來完成的話,就能在調整 O(1) - O(E[x]) 完成。』
『如果用一個最常見的樹鏈剖分來完成也不過是 O(log n) - O(log^2 n)』
『在一般情況下,詢問次數肯定比調整次數來得高,想一想常數還得加上去,完全贏不了啊。』
學姊在一旁說到
『那如果是單純的二元樹,有比較好做嗎?說不定有更簡化的算法來完成?』
『說不定那個 … bitvertor 還是 bitset 能完成呢。』
『這個想法難不成是找到 lowbit 嗎?我沒有暫時想法。』某 M 這麼回答道。
『也許吧 … 我也不確定』學姊簇著眉。
某 M 發了瘋似的想了一個算法
『如果我們將其轉換成 k-ary search tree,也就是說需要將節點編號重新編成有大小關係,然後維護一個 BST 來查找 lower_bound 的結果,這麼一來就是 O(k log n) - O(log n) 了!』
『啊啊啊,這個方法不可行,』
學姊將鄙視般的眼神投向某 M。看來這場病還要持續很久。
『將題目弄成找樹前綴和好了,既然暴力法有期望值的剪枝,讓它剪不了不就好了!』
『你覺得不會被其他解法坑殺嗎 …』學姊如此擔憂地表示到。
『沒關係,吾等 M 可不是說假的』
給定一棵樹,樹根 root 編號 0,每個點一開始的權重為 0。
操作 x k: 將節點 x 的權重增加 k,請輸出從 x 到 root 的權重和。
輸入有多組測資,每組測資第一行會有一個整數 N (N < 32767),表示這棵樹有多少個節點。
接下來會有 N - 1 行,每一行上會有兩個整數 u, v (0 <= u, v < N) 表示 u, v 之間有一條邊。
接下來會有一行上有一個整數 Q (Q < 32767),表示接下來有 M 組詢問。
對於每個詢問結果輸出一行,請參照範例輸出的說明。
每組測資後空一行。
|
|
|
|
名為 “學姊”。
|
正陷入暗戀的蘿莉控,對象正是那小海女 “能年犬”,為了與其相遇,做了一個情報偵測器,但總不能刻意繞道去相遇,這顯然會相當接近跟蹤狂。根據情報網顯示,地圖將會長得跟樹狀圖一樣,接著會有一連串的消息顯示小海女疑似出現的地方,同時也會被驗證是假消息。
蘿莉控只想知道如果從 x 點回到家的路上,有沒有機會遇到小海女。如果事先知道將會在哪個場所相遇,就能事先準備。接下來就請你協助他了!
給定一棵樹,樹根編號 0,每個點一開始的權重為 0,操作有以下兩種。
操作 M x : 將節點 x 的權重從 0->1 或者 1->0。
操作 S x : 輸出從 x 到 root 路徑上,第一個權重為 1 的節點編號。
輸入有多組測資,每組測資第一行會有一個整數 N (N < 32767),表示這棵樹有多少個節點。
接下來會有 N - 1 行,每一行上會有兩個整數 u, v (0 <= u, v < N) 表示 u, v 之間有一條邊。
接下來會有一行上有一個整數 Q (Q < 32767),表示接下來有 M 組詢問。
對於每個詢問結果輸出一行,請參照範例輸出的說明。
每組測資後空一行。
|
|
|
|
|
在三維空間中劃分區域,給定 N 個平面,對於每一個點而言形成 N-tuple 的資訊 (0/1 左側、右側)。請問哪一個 N-tuple 具有最多點,輸出最多的點個數即可。
|
|
|
|
直接將平面帶入每一個點,得到 N-tuple 資訊,接著對這個資訊做 RS hash 下,直接壓 int 去做 count,這樣會快於 map<string, int>
。
|
|
目標從太空船 S 到太空船 T,每一個太空船上有 N 個按鈕,每一種按鈕可以傳送到指定的太空船上,請問 L 步從 S 到 T 的按法有幾種。
|
|
|
|
既然按鈕都不同,那就可以轉換成一般的 Graph,然後轉化成 K 步內抵達的方法數。
直接利用矩陣相乘計算方法數!
|
|
要一下出題目規格,就有漂亮的 latex pdf!
|
|
某 M 現在正在平面座標上的原點 (0, 0)
,現在四周被擺放了很多很多鏡子,某 M 可以藉由鏡子與他的人格小夥伴對話,請問那些鏡子可以見到小夥伴。
鏡子可以當作一個線段,之間不會交任何一點,只要能見到該鏡子中一小段區域就算可見到。
備註:不考慮反射看到。
輸入有多組測資。
每組測資第一行將會有一個整數 n (n < 32767),表示總共有多少個鏡子。
接著會有 n 行,每一行上會有 4 個整數 sx, sy, ex, ey,表示鏡子所在的線段。
(-32767 < sx, sy, ex, ey < 32767)
對於每組測資輸出一行,每一行將會有 n 個整數 (0/1),分別表示輸入中第 i 個鏡子是否可見到。
|
|
|
|
|