Problem
給予最多 4 個骰子,修改最少的面,使得每個骰子同構。
Sample Input
|
|
Sample Output
|
|
Solution
由於每個骰子有 24 種同構排列,複雜度 O(24^4)
。
將排列對齊後,使用貪心算法,將每一個 column 找到最多相同元素,剩餘的就是最少修改元素。
類似漢明距離的最少修改。順便將之前的代碼重新構造。
|
|
給予最多 4 個骰子,修改最少的面,使得每個骰子同構。
|
|
|
|
由於每個骰子有 24 種同構排列,複雜度 O(24^4)
。
將排列對齊後,使用貪心算法,將每一個 column 找到最多相同元素,剩餘的就是最少修改元素。
類似漢明距離的最少修改。順便將之前的代碼重新構造。
|
|
圓桌武士要圍一桌,由於騎士很多,他們彼此憎恨的關係也越來越複雜,梅林被聘請來計劃會議的圓桌位置,騎士們的座位必須符合下列條件,否則將會無法開會。
由於是圓桌,每個騎士都恰好有兩個鄰居,梅林只想知道誰絕對沒有辦法參與圓桌,求出絕對無法參與圓桌會議的騎士個數,並不用最大化圓桌的最大人數。
|
|
|
|
首先,一個簡單的特性,二分圖如果存在環,則保證沒有奇環,因為從 X 集合出去到 Y 集合,再回到 X 集合,保證環的路徑一定經過偶數條邊。同時,存在奇環的圖,一定不是二分圖。
二分圖不存在奇環,存在奇環的圖一定不是二分圖
藉由這個道理,這題還需要點特性,如果這張圖存在奇環,對於一個 BCC (雙向連通元件),則滿足所有點都可以在一個奇環上。有可能一個點同時在奇環或者是偶環。
這個證明也很簡單,BCC 在元件中,定義拿走任一條邊 e(u, v)
,u
和 v
之間仍然存在一條路徑。那麼可以知道對於一個奇環上的點 x
和 y
,以及奇環外一點 u
,若 e(x, u)
存在,則 e(u, y)
也存在,則會產生兩個環,其中一個環一定是奇數。擴散下去,所有在 BCC 元件的點,都會在一個奇環上。
BCC 存在奇環,每一個點都至少在一個奇環上
很久沒寫 BCC,一直以來寫 cut point (關節點) 和 cut edge (bridge) 的機會比較高,都忘了 BCC 的寫法。一張圖,拆成 BCC 時,每一個節點可能存在數個 BCC 元件中。
|
|
反正也沒什麼人關注,這篇就跟著之前內容隨興寫寫。
說一聲,最近沒有更新 BLOG,其解題代碼都直接送至 GitHub Repo UVa 中,同時要墮落於學校課程,寫 Big Data 作業折騰很久,隨後要開始進行 Game Maker 軟體使用,之後又要看學校課程的論文,交心得了事,最近的行程是這樣安排。
首先,這學期仍然沒有去實習,因為修了四天的課,「 明明是個大四? 」,的確修了四天的系上選修,但是選課不盡人意,最後一學期初選果斷一門課也沒有,以前都是只中體育跟通識,系上選修課還真是難搶,結果就上了不怎麼喜歡的選修課。不過也就這樣吧,反正大學也失敗。
剛開學的日子,寫了點題目,玩了下 python,沒有到可以 UVa 解題的程度,一行程式果然不適合我,第一次實戰拿來玩 Big Data 的預處理資料分析,事實上用 Java 就能辦到。
隨著大家關心我研究所的事,當然心中充滿了掙扎,不是我願意不找教授,我有資格找教授嗎?這大學能讓我畢業嗎?很多人會覺得莫名奇妙,明明上了還不行動。讓我死在這裡吧。
配合上一篇巨量資料的學習,利用馬可夫過程找到 Page Rank。
|
|
|
|
然而 Page Rank 計算主要分成兩種,一種是指派所有的 Page Rank 總合為 S,如果加起來不足 S,則把不足的部分平攤給所有節點,這麼一來計算誤差就可以被碾平,但這樣會會因為太多網頁,而導致單一 Rank 過小。
另外一種,則單純倚靠隨機的全局擴散,雖然會有計算誤差,持續做下去一樣會收斂。
為了加快速度,將公式的$1 - \beta$ 提出,沒有必要將一個稀疏矩陣變成稠密矩陣,如果每一個矩陣元素都加上$\frac{1 - \beta}{N}$ 會導致整個矩陣不存在非 0 的元素,而事實上 0 的元素是相當多的。這麼一來每次迭代的效率為$O(E)$,而非$O(N^{2})$。
|
|
每一個網站都有超連結 (hyperlink) 到另一個網頁,因此會貢獻一部分的 page rank 給另一個網站,假想移動是隨機的,那麼轉移機會是 1 / 出度
。
把網站之間的關係轉為 Graph,問題可以轉換成馬可夫過程。光是馬可夫過程,很容易造成 page rank 失算,因為有些點並沒有出度 (連接到別的網站),數值就會隨著迭代集中到這個孤島上 (或者說蜘蛛網),造成其他點的 page rank 皆為 0。為了防止這一點,給予 page rank 的總和$S$,並且要求馬可夫過程,轉移只有$\beta$ 的信任度,剩餘的$1 - \beta$ 將隨機選擇全局的網站進行轉移。
每組第一行輸入兩個實數$\beta$,$S$。
第二行輸入一個整數 N,表示有多少個點。接下來會有 N 行,每一行的第一個數字,表示 i-th 點會連到其他網站的個數$m_{i}$,接著同一行會有$m_{i}$ 個數字,表示連入的網站編號。
所有網站編號應為 0 … N-1。
|
|
|
|
以下是簡單實作的結果。迭代 100 次,就能收斂程度就相當足夠。
|
|
用最少的皇后,覆蓋盤面中所有的 ‘X’。皇后之間的相互攻擊可以忽略不理。
|
|
|
|
直接套 DLX 最小重複覆蓋的模板,但是單純使用會狂 TLE。額外加上初始貪心,找到搜索的第一把剪枝條件,這一個貪心使用每次找盤面上能覆蓋最多 ‘X’ 的位置,進行放置皇后的工作。
|
|
對平面上,每一個點找到最鄰近點的距離,輸出歐幾里得距離的平方即可。
|
|
|
|
計算幾何中的資料結構 KD-tree,雖然不算完美,一開始先進行 random search,先找到基礎的剪枝條件,隨後掛上啟發式進行搜索。
KD-tree 的效能在 D 度空間,區間詢問 (回報區域中的所有點或求區域極值) 的效能約為 O(n^(1-1/d))
。我不會估算找鄰近點對的效能。
|
|
關於 Delaunay triangulation 在此就不說明,由於是 Voronoi Diagram,就可以找到所有相鄰的點。
效能是 O(n log n)
,而平面上的邊為線性 O(n)
,但這種做法必須離線。
|
|
在凸多邊形內部找一最大空白矩形 (平行兩軸)。多邊形頂點數最多 10 萬個。
|
|
|
|
三分內嵌三分再內嵌二分,幾何算法從函數觀點下手的有趣題目。
首先,觀察矩形在 x 軸的情況,觀察矩形左側 left.x,最大空白矩形面積呈現凸性,而在 left.x 下,right.x 分布也呈現凸性。
因此,三分左端點再三分右端點,最後二分查找兩條平行線交凸邊形的兩點,找到空白矩形的面積。
|
|
操作有二種,學習單詞以及給一篇文章,詢問學習單詞出現總次數。
輸入有經過加密,其加密的位移量為上一次詢問答案。
|
|
|
|
如果是靜態,則可以想到 AC 自動機自然可以解決,但是 AC 自動機卻不支持動態建造。
為了滿足操作,可以利用快取記憶體的方式,進行分層,將小台 AC 自動機不斷重新建造,當小台 AC 自動機的節點總數大於某個值時,將其與大台 AC 自動機合併。合併操作必須是線性的,不要去重新插入每一個單詞。
特別小心有重複的單詞出現的小台或者是大台的操作,如果有重複必須忽略。雖然在理論上,分兩層操作的總複雜度高於倍增分層 (2, 4, 6, 8, …),但是實作後,倍增分層一直 TLE。
然而這一題還有一種更困難的作法,詳見劉汝佳那本書,估計是一個動態後綴樹自動機 …
|
|
每一條公車路線都是環狀,要求每一個站只在一條公車路線上,給定站與站之間的連通花費,求公車路線最少為何。
|
|
|
|
看起來先拆點,要求每一個點變成出點跟入點,要求每一個出點都能配對一個入點,這麼一來能保證每一個點都能走出去,進而形成環狀。
那麼這就是一題完美帶權二分匹配判定。
|
|