Google Code Jam Round 2
こんな微妙な時間帯にやるのが全て悪いんだ、と開き直ってみたい。
A. Elegant Diamond
- 配点低いし、これは面倒くさいけど書くだけだなと思いながら読んだ。
- え。普通に分からん。
- 爆速で解いてる人もいないし、普通に難しいのか。
- 一番簡単な問題がこれって、Google本気出しすぎだろ...
- 爆速で解いてる人もいないし、普通に難しいのか。
- え。普通に分からん。
- ...行ごととか列ごとに考えれば言いわけで。
- 対称になれってことはつまり回文になれってことで。
- 行ごと・列ごとに、あと何文字足せば回文に出来るかを求めてmaxとればよさそう。
- UVaで見た覚えがある。Next Generation Contest 4だったかに出てきたExtend to Palindromeだったっけ。
- あっちはサイズ大きすぎて解けなかったけど。
- KMPもBoyer-MooreもRabin-Karpも書けなかった/知らなかったころの思い出です。
- とにかく、末尾 n 文字が回文になってればそこは保管する必要が無いわけで、そういう最大の n を探せばok.
- あっちはサイズ大きすぎて解けなかったけど。
- UVaで見た覚えがある。Next Generation Contest 4だったかに出てきたExtend to Palindromeだったっけ。
- 買いてみよう。
- ...
- あれ?
- 別に末尾に足すばかりでもなくて、頭に足すパターンもある?
- ...よく分からない。飛ばそう。
B. World Cup 2010
- 入力サイズが10。ビットDPの予感!
- よく見たら普通に 210 でした。
- それにしても small/large の差が重みあり/なしってのも面白いな。
- とりあえず完全二分木を書いてから考えよう。
- ...
- 決勝を見るのってなんだかお得っぽい。
- あるチームが勝ち残ってたら見逃しカウントひとつ減らせるし、もう負けてたら試合が無いので見逃しカウントとかない。
- ...おぉ。
- 重みなしだとgreedyに上から見ていけばいいのか。
- 取り合えず実装。
- ...
- 書けた。念のためちょっと入念にテストケース作る。良さそうだ。
- submit. Correct!
- んで、largeをどうするかですが。
- small と違うのは、例えば決勝がバカみたいに高いときに、準決勝までで満足したほうが安いケースがあるわけで。
- 今までに何回見たか覚えておくDPで良さそう。
- っていうかこれ分割統治じゃないか?メモ化必要なさそう。
- これぐらいなら最初から large で書いてもよかったかな。
- まぁ正しい入出力が手に入ったので満足しておく。
- ...
- 頭こんがらがる。30分以上掛けてやっとsampleでてきた。
- せっかく手に入れたデータを通してみるか。
- 全然合わない...
- せっかく手に入れたデータを通してみるか。
- ...
- プログラムを見つめてもどこが悪いのかさっぱり。
- しかたない、適当なケース見繕って手書きするか...
- ...
- 再帰の終了条件の辺でおかしくなってる?
- ...あー!
- r > 0 ? a : b ; のつもりで r ? a : b って書いてたけど、よく考えたら r って負数になり得るじゃん!
- 直した。smallでてきた。
- largeの入力落とそうと思ったら終わってた...。
- もちろんPracticeであっさり通しました。
result
- 10pt, 1,507位。
- 毎年のようにRound 2で敗退。
- この後SRM出ようと思ってたけど、レーティングが下がる未来しか見えない。
- 寝ます...。