Problem
寫一個模擬成績登錄系統的程式。
Sample Input
|
|
Sample Output
|
|
Solution
純苦工題目。
Try adding 1e-5 to all floating point values as you print them.
難怪會 WA,看到時小夥伴們都傻眼,不過應該也是因為大部分仍然使用 float
輸出,用 double
反而會得到 WA 的例子不在少數。
|
|
寫一個模擬成績登錄系統的程式。
|
|
|
|
純苦工題目。
Try adding 1e-5 to all floating point values as you print them.
難怪會 WA,看到時小夥伴們都傻眼,不過應該也是因為大部分仍然使用 float
輸出,用 double
反而會得到 WA 的例子不在少數。
|
|
在長條圖中,每一條有其的數值和顏色屬性,找到一個最大的面積,使得每一個顏色都出現過。
|
|
|
|
對於每一個長條 h[i]
,勢必將往左往右延伸到第一個數值比較低的,因此會得到一個區間 [l, r]
,如果 [l, r]
之間不具有所有顏色,則忽略之。反之紀錄 h[i] * (r - l + 1)
是否為最大值。這樣的貪心方式,盡可能會具有最多的顏色,同時考慮到所有最大面積會卡住的地方。
但是窮舉找到每一個 [l, r]
相當費時,這裡運用單調堆的思路,分別從左、從右側往反方向掃描,掃描時維護堆裡面元素呈現遞減情況,分別找到左右端點後,檢查是否區間內有相符的顏色個數。
找所有左右端點只需要 O(n)
時間,但是檢查區間內的顏色個數是否符合則必須 O(nm)
。
|
|
給一個 n = 3 魔術方塊的盤面,找最少操作次數使其每一面顏色都相同。
每一次操作限定旋轉 90 度。如果需要的步數大於 7 步,直接輸出 Impossible
。
|
|
|
|
首先,關於旋轉操作只能手動打表,總共會有 9 種旋轉序列 (窮舉時操作成順、逆兩種),其中的 6 種序列會使得相鄰的面旋轉 90 度 (必須特別考慮這邊緣的旋轉)。
關於啟發式:六個面中,其中一個面具有最多的顏色,將會是預估的最少移動操作。
這一個啟發式相當重要,也非常難想,參考 http://blog.csdn.net/qq564690377/article/details/16867503
一開始使用 IDA* 的效果似乎不很好,於是換了雙向 BFS (doubling BFS),由於步數限定 7 步內,從目標狀態建表 4 步內的結果。接著對於每一組詢問,搜索 3 步內的操作,查看是否會相遇。
狀態壓縮可以採用重新命名,也就是最小化表示法,不管顏色,只考慮同構。
|
|
兩個 2D 模式找出現的次數。
|
|
|
|
做法來源:http://www.csie.ntnu.edu.tw/~u91029/StringMatching.html#5
演算法筆記-2D String Matching: Baker-Bird Algorithm
步驟 1.
把 T 橫切成一條一條,
把 P 橫切成一條一條,
然後每一條 T 都執行 Multi-Pattern String Matching,例如Aho-Corasick Algorithm。
如果第 a 條 P ,從 T[i,j] 開始出現,那麼就進行紀錄:M[i,j] = a。
M 是一個跟 T 一樣大的陣列。
步驟 2.
把M直切成一條一條,
每一條M都執行String Matching,例如Morris-Pratt Algorithm。
看看是否出現1234567…n這個字串(剛剛P共有n條)。
要點
當 P 有某兩條相同時,則要小心處理,把這兩條的編號設為相同。
AC 自動機不用跑匹配的後綴,因為必然是沒有的,所以在這裡的 AC 自動機寫法比較特別。
速度看起來挺慢的,也許 hash 或者是 FFT 某方面對於這種會稍微快一點?
|
|
一款神秘的團隊遊戲,機器人需要彼此合作,使得 1 號機器人恰好停留在 X 上面。盤面最多給定 4 個機器人。
每一個時刻,最多有一個機器人進行移動,此時會將其他機器人視為障礙物,每次選擇其中一個方向,並且要移動到碰到障礙物為止。
在有限步數內找到一個最小步數,如果找不到輸出無解。
|
|
|
|
把多個機器人的座標作為一個狀態。狀態紀錄時,除了 1 號機器人外,其他機器人的座標視為集合看待,適當地減少搜索狀態。
跟預期想的相同,全搜索不致於造成狀態總數過大。
|
|
有 N x M 個魚池,接著要進行釣魚,為了防止生態滅絕,必須要餵兩次魚才能釣一次魚。餵魚時必須嚴格往右下角餵,釣魚也必須依序嚴格往右下角餵。很特別的是,釣魚、餵魚不影響魚池內的數量 (WTF)。餵魚成本、釣魚獲益都等於該魚池的數量,可以選擇在同一個魚池餵魚或者是釣魚。
求最大獲益為何?
|
|
|
|
兩個路徑獨立,分開計算最大獲益路徑,直接著手 dp,找左上到右下,挑數個進行釣魚和餵魚動作。
每一個位置多紀錄已經挑了多少個魚池動作,隨後窮舉到底要怎麼組合來得到最佳獲益。
|
|
Total number of odd entries in first n rows of Pascal’s triangle.
對於巴斯卡三角形找奇數的個數。
|
|
|
|
下面是巴斯卡三角形 (組合數) 前 n 行為奇數的總個數。
0, 1, 3, 5, 9, 11, 15, 19, 27, 29, 33, 37, 45, 49, 57, 65, 81, 83, 87, 91, 99, 103, 111, 119, 135, 139, 147, 155, 171, 179, 195, 211, 243, 245, 249, 253, 261, 265, 273, 281, 297, 301, 309, 317, 333, 341, 357, 373, 405, 409, 417, 425, 441, 449, 465, 481, 513, 521
在 A006046 可以得到遞迴公式:
a(0) = 0
a(1) = 1
a(2k) = 3 * a(k)
, a(2k+1) = 2*a(k) + a(k+1)
但是在第三項中可以發現到有可能指數增加,由於會被拆分成兩項,所以這方法不太可行。
如果打印每一行的奇數個數出來,四四分組,會發現組合是以 2 的冪次增長的組合,而組合之間恰好是兩倍的關係。
|
|
觀察如上所述,遞推之。
|
|
這場爭論還在持續中,活在什麼環境就會有什麼樣的想法,沒有全區的誰對誰錯。老子就是看那群台清交不爽啊!努力、聰明從來都不是問題,不能讓人佩服得心服口服就會不滿,認知差異、體諒差異,並非積極消除差異。
拿努力、聰明的成果當作區隔、拒絕的手段,倒不如說「空閒時間會嘗試用自己的方法。」不做其實沒差。等到沒了戰友,那又是什麼困境呢?
大家好,我是 morris (morris821028),被點名來說對於 ACM-ICPC 競賽資源在各校分配不均的看法。
首先,有個共識台清交都有系統式訓練,若說沒有系統式訓練,至少還有一群默默在背後敲代碼的同學、學長一起奮鬥。訓練環境有資源、有伴、有敵,對於非台清交的學生大多數沒有這樣的方式學習,但我覺得沒必要用相同的模式運作、也辦不到。
有教授、學長們引領固然不錯,能在有限時間內達到競賽水平,從高中開始當 ACMer 的我來說,很多人大學才開始學這領域,兩年就能上戰場的牛人,當然會先精神崩潰一下,然後吵著、罵著「他們有資源啊!」當時也這麼暗地著罵著,仔細想想自己沒有辦法在所謂系統式訓練下苟延殘喘,已經在沒有督促下學習很久,把我關進籠子學習,大概只會見到越來越低落的 morris。
對我來說,講講自己有多討厭你們的才華、罵罵你們所擁有的資源,心裡才會舒坦點。間歇性地說這些,明白自己永遠不會跟你們用同一個方式做事、學習。「爭取」作為一個求上進的舉動?爭取到後,才發現自己多麼不合適,還不如讓適合的人運用這些資源。
我們被放上同一個架子上面比價,所以才會這麼不滿。「這麼不滿?那為什麼還要自找苦吃?」只是想學、還不想輸,願意用那數倍的時間來驗證自己的價值,也許不會被兜售出去,起碼價值還有機會留下,用不同的方式引領不一樣的人。
分配不均很正常,不然要拿什麼作為目標?等把自己所擁有的資源啃食完後,自然而然地就會找到、接觸新的資源,這樣比較有尋寶的樂趣?
我來自東部的花蓮,要說高中學習資源,少之又少!學長們也要在西部學校讀書,哪有空回學校教人,回來教一兩隻小貓?
高中-花蓮高中資優班,但也別想太多,咱們資優班不看整體分數的高低,考試靠單科成績決勝負,並且三年不換人。因此才有專題課選擇資訊的機會,從上高中開始才接觸這領域,一開始非常討厭寫程序,打從心底就排斥它。
靠著抄同學的作業活過來,老師教了語法基礎後,就發布挑戰-「寒暑假在 Zerojudge 完成 100 題」大家也知道 ZJ 很多水題,自然而然地成為生活中的一部分,水題寫個一天也不是問題,也許就是東部小孩的權力吧,不是為了競賽成績而學。
參加 NPSC、資訊科能力競賽,當時參加三年 NPSC 連一題都沒寫出來,根本不會讀檔操作,拿了錯誤訊息回來還真不知道是沒有讀檔成功還什麼的,就這麼度過三年比賽。在 NPSC 0 題,幾乎可以說是高中傳承的零題傳統。
在東區資訊科能力競賽中,程設部分都是數學模擬,跟西部的題目大相逕庭。決戰點都是在計概,那時不喜歡讀書的我幾乎都拿了期望值回來。最後一年進了全國賽,程設題目幾乎全寫,興沖沖地排隊等測試,那時還有「寫比較多題的人排前面」測試完後,拿了慘不忍睹的成績,早知道乾脆不寫。測試一結束,就趕緊搭車回花蓮,連頭都不想回。
(以上略-)
如果多少認識我,都明白我英文不好、中文理解也不行,出去比賽還需要一個高強度容忍的翻譯機,不然寫到一半的翻桌。這樣的能力絕對上不了台清交,大學就讀中興大學,隨後嘗試轉學到台清交成,但是沒有成功。最後在茵可的邀約才到中央大學。
也不是說要多麼有系統的訓練,學校課程沒有台清交的課程繁重,我們一學期的課程內容說不定還比不上台清交幾周的內容,有比較多時間慢慢寫程式,即使進步很慢,寫得好 (易懂)、寫得快比起寫得正確來得有趣。
我不適合比賽,跟學長們玩了幾次全國競賽,創下學校成績新高之後,就這麼解散。不弄 Topcoder、Codeforces 及 Google Code Jam,一來是看完題目差不多比賽就結束,二來介面和流程一度讓我精神崩潰,所以窩在簡單的 UVa 裡面打混。
打混的方式-東抄抄西抄抄,因為想要 AC、想出題,所以才學某些噁心的算法。看代碼、看題解學習就是我的學習方式,看了也不見得懂,那為什麼還要怕去看別人寫的?所有都由自己想、自己解決對我來說是奢侈,有 CSDN 可以靠,對我來說資源很夠,就怕沒能力理解。
部落格的部分內容根本不是寫給別人看的,整個 google 就是我的 codebook,寫完就會忘、理解透徹也會忘、自己做的報告也會忘。
給 N x N 個 grid,每一格有權重,找到一個連通子圖,其大小恰好為 M,並且具有最大權重。
|
|
|
|
Number of fixed polyominoes with n cells.
Number of fixed polyominoes with n cells. (Formerly M1639 N0641)
1, 2, 6, 19, 63, 216, 760, 2725, 9910, 36446, 135268, 505861, 1903890, 7204874, 27394666, 104592937, 400795844, 1540820542, 5940738676, 22964779660, 88983512783, 345532572678, 1344372335524, 5239988770268, 20457802016011, 79992676367108, 313224032098244, 1228088671826973
連通子圖 n = 10 也不過 36446,對於所有位置嘗試擺放,也不過 O(36446 * 50 * 50)
,給 60 秒還跑不出來。
關於窮舉連通圖的部分,想像成生成樹,這棵樹必然要有 M 個節點,適時要在葉節點返回,然後在其他尚未長出來的地方繼續生長。根據尤拉路徑最多走 2M 步,窮舉 2M 步進行建造。
為了加快窮舉速度,將找到的 polyominoes 依據長寬儲存,窮舉時先 greedy 估算這個矩形內部能產出最好的 polyominoes 可能是多少,如果已經低於已知解就直接放棄。
只能說測資不隨機,有極端測資,照理來講不用建表的速度應該會稍微快了些。
|
|
N 個人圍繞一圈,每一個回合自身的分數為相鄰距離小於 D (不包含自己) 的權重總和 mod N。
請問在 K 個回合後,最大分數和擁有最大分數的人分別為何?
|
|
|
|
由於 K 很大,明顯地是一道矩陣 D&C。
把遞迴公式建造出來,可以在 O(N^3 log K)
時間內完成。
|
|