2011-06-18
SRM 509 Div2
Easy (250) PalindromizationDiv2
問題
- 0から100000までの数が与えられる
- 加算または減算で、左右対称にするための最小コストを求める
方針
- 10で割った余りで判定するのをループ
実装
- 本番: 数の範囲が小さいので場合わけして解いた
- 解きなおし: 正順と逆順で格納してから、半分の長さでmemcmp
- https://github.com/firewood/topcoder/blob/master/srm_5xx/srm_509/PalindromizationDiv2.cpp
Medium (500) LuckyRemainder
問題
- n個の数値が与えられる
- その数を組み合わせてできる全ての数の合計を9で割った余りを求める
方針
- 9の余りは、どの桁にあっても同じ
- それぞれの桁の数を足してから余りを求めればよい
- それぞれの値は、使うか使わないかで2^(n-1)回出現する
実装
- 本番: 総数を数え間違えてsubmitまで至らず
- 解きなおし: それぞれの数を合計してから2^(n-1)倍して、最後にmod 9を求める
- https://github.com/firewood/topcoder/blob/master/srm_5xx/srm_509/LuckyRemainder.cpp
Hard (1000) NumberLabyrinthDiv2
問題
- 縦R×横Cのマス目があり、空または数字が書いてある。
- 数字が書いてあるコマからは、その数値だけ縦または横にジャンプできる。
- 空のマスには全体でK個だけ数字を書くことができる。
- 始点と終点が与えられるとき、最小のジャンプ回数を求める。
方針
- 基本はBFSで探索
- 数字がない場所は、書けば行ける
- 書いた場合は、次のレベルのキューに突っ込むようにする
- 書かずに行ける場所を全部処理してから、次のレベルを処理する
- 書くことによって最小値が更新されることがあるので、常にK個書く
- https://github.com/firewood/topcoder/blob/master/srm_5xx/srm_509/NumberLabyrinthDiv2.cpp
結果
o-- 158.15 955 -> 908
Easyしか通らなかったのでrateが微減...
- 44 https://topcoder-g-hatena-ne-jp.jag-icpc.org/
- 2 https://topcoder-g-hatena-ne-jp.jag-icpc.org/diarylist
- 1 http://www.google.co.jp/search?hl=ja&client=firefox-a&hs=l4W&rls=org.mozilla:ja:official&biw=1020&bih=668&q=srm+509+div2&aq=f&aqi=&aql=&oq=
- 1 http://www.google.co.jp/url?sa=t&source=web&cd=18&ved=0CFAQFjAHOAo&url=https://topcoder-g-hatena-ne-jp.jag-icpc.org/firewood/20110618/1308410422&rct=j&q=SRM 509&ei=N6P_Tf3KMZHzrQfGkvnPDw&usg=AFQjCNGu6_EsoPZ7fWss7SeFOwf4fpbD6Q