網頁

Monday 23 May 2011

Yandex 2011 Round 2

好不容易才打到 Round 2, 不過都係與 T-shirt 無緣

A - 見識過 Round 1 的 A, 對這次的 A 已有心理準備, 先寫一個慢的 program 去找 observation, 有 2 個重要的發現:

4, 49, 499, 4999, 49999.. 是 peak 值 ;
去除這些 peak 值, 如果 x < y, 有 weight(x) < weight(y)

所以解法是先試試 weight(r), 然後試試 4, 49, 499 .. 等


B - 題目個 tag: Constructive algorithm
一開始還是被嚇住了, 之後想到一個很麻煩的做法:

1. 對每個 row, 每堆連續的 space 可以用 length 2 和 3 的 figure cover (2+2+2... / 3+2+2+2...)
2. 之後就是 handle 一些 alone space, 我先把垂直相連還未被 cover 的 space 用上述方法 cover
3. 最後便是一些

#000#
##.##
11122

的 space, 如果上下都是 #, 則無解; 否則可以「痴」到上下的 figure, 但還有一個麻煩情況, 就是


#.#.#
#...#
#.#.#

不合法的 figure. 所以如果上下的是 "000" 的形狀, 我會把它們砌成:


#.###      #0###
#111#  ->  #011#
#.###      #0###

怎看也很煩膠的方法, 用了 >30 分鐘去寫+debug, 不過最後還是過不了, 原因是我 label 那些 figure 時應該出了錯, 用了同一個數字去 represent 算法「認為」不是同一個 figure 但相連的 figure, 其實我寫的時侯已經有刻意留意, 不過問題是只有 10 個數字用, 十分不足, 逼不得已去「重用」一些數字時出錯..


C - 又是 AC 自動機 + DP, 完場前 5 分鐘寫完, 不過連 sample 也未過到; 之後都用左好多時間 debug, quote Joe神一句

因為曾經做過的關係,有些第一次做會錯的地方都避免了

原來第一次做真的會有很多地方出錯, 而且是對著錯的 data 才發現錯處, 即是就算放棄 B 不做也應該過不到 C, 而且過到 B 也入不到頭 70, 結論就是無論如何也入不到頭 70

Wednesday 18 May 2011

SRM 504.5

250
又是和 4,7 有關的數論題
想過用BFS, 但想想又覺得會寫得很長
最後還是直接把 10 個 case 打落去

550
花了一段時間, 觀察到 money[] 會續漸趨向一樣, 然後就可以很快計算結果
但想來想去也覺得就咁 simulate 趨向一樣前的 process 會很慢..
加上不懂得在不 overflow 的情況下計算 average (是出題者刻意的伏?), 所以決定開 900 做

900
其實是頗 standard 的機率題..
我的做法是計算 p(x) = 前面有 x 個人, 後面沒有人時, 被選中的機率
可以在 O(N2) 計算..
但是完場時還是過不到sample, 後來發現沒有 handle 「只剩自己一人」的case