2010年7月14日星期三

2010-07-13 Individual Training

今天 PKU 終於復活(就香港、廣州等地而言)

晚上的 training
those 因為有事未能參與,所以由他來選題
然而其中一題未能讀入,便隨意選一道他做過的 geometry 題目取替之
(後來被這題玩殘了...)

training 暫時草草速記如下,細節後補:



題A Adventure of Super Mario
shortest path

做兩遍 shortest path
  1. 用 floyd 求出 all-pair-shotest path,避過中間節點是 castle 的情況
  2. 將每個 node(地點)分為 K 層,表示使用過 K 次 super-running



題B PKU 3429 metry with a Ruler
高精度 + 2D geom

被玩殘了...又要高精度又要分數 ⇒ 只好用 Java
編程期間出現很多 compile error,「夾硬」加了 static modifier 水過
(發現自己對 Java 的理解只有 1130 的程度,有待進修 orz...)
首次為 ACM 題寫 Java 的 Inner class... 而且還是兩個
Point2D of Fraction of BigInteger!!

leo有更巧妙的方法 ─ 利用內建 BigDecimal 設定 precision 為 400 個小數位

gagguy 用 fraction of long long 通過了... 可惡!



題C PKU 3493 Chessboard Puzzle
min-cost flow/dp/greedy(?)

解1: 依我來看,跟 Dual Core CPU 如出一轍,同樣是 binary labelling 問題
只是這題更 general,要處理 -ve cost
所以... 不能直接應用 minimum cut
不過透過 min-cost flow 就能實現 minimum cost cut(這個 cut 可以 -ve)

為此算法寫了一篇 blog entry

──可是這樣求出的 割 (Cut) 是否必然對應一個 bicoloring嗯... 有水過的嫌疑

解2: 超超用的是 壓縮DP,時間複雜度 O(2M MN)
我們 row-by-row,col-by-col 地給每一格進行黑/白染色
至第 [i, j] 格時,一共有 2M 種 configuration
每種 state 的更新只需要考慮剛才填上的 M 格

前幾天 AC 了,發覺很容易 code
詳情可以參考 gagguy 的 blog entry

解3: 看 Discuss 發現有人用 貪心算法



題D PKU 3221 Diamond Puzzle
bfs

本應可以 ~5 min KO...
可沒看清題目... 以為 Figure 2, 3 都是合法終結狀態... 卡了好幾分鐘...
對於寫出來的代碼感到非常滿意 =v=



題E ICPC 4270 Discret Square Roots
number theory(算是吧?)

至 training 剩下 30 min
超超笑著道出「頹做」二字後
我 跟 chin 和 leo 往這方向想...
加上在 「y 是 solution, n-y 也是 solution ⇒ 只需考慮 ≥ n/2」的提示
還是想不出來,但後來發現其實跟超超的答案相差不遠矣
(剛才 AC 的 code 裏面,跟超超的 solution 有些不同,但背後道理一樣)

:O(#因數 × sqrt(M)) 窮舉法,可以參考 此 blog entry



題F (後補)
simulation

是往年 summer 殘餘的 individual training 題目
印象中 joe 也要在 training 過後一小段時間寫好
我在是次 trainng 把這題 priority 放到最低,直接略過

沒有留言:

發佈留言