Google Code Jam 2010 Round 2

正直、敗退しても文句を言えない出来のRound2でありました。

  • -

C : Bacteria

問題:簡易版ライフゲームバクテリアが滅ぶまでの時間を求める

  • Aが低得点な割に面倒に見えたので、とりあえずCを。
  • smallは初期状態のバクテリアの分布が100×100のマス内に収まる。
  • バクテリアが生まれる・死ぬ条件は,
  • 100ターンもあれば滅ぶだろうという事で素直にシミュレーション。smallは通る。
  • largeだと初期分布で1000000×1000000のマス内。
  • 全く方針が立たないので諦めた。

B : World Cup 2010

問題:トーナメント表のチームiが出場しうる試合を高々M[i]回しか見のがさないようにチケットを買う

  • チーム数は2べきで、smallもlargeも高々1024。
  • smallだとチケット料金が1で、largeは試合ごとに料金が異なる。
  • チケット料金は最も安上がりになるようにする。
  • 精神安定上、とりあえずsmallだけ通しておく事に。
  • 上位の試合ほど影響するチーム数が多いので、決勝から貪欲に購入するだけ。
  • 書いたらサンプル通ったのでsubmit。smallは通った。
  • largeだけど…昔トーナメント表の問題でDPしたような気がする。
  • トーナメントは1部分を切り出してもトーナメント表のままなので、
    • 第i試合のkブロック目に関係するチームの(残りの試合数-M)をjに抑えるコスト
    • を、下位の試合からDPした
  • サンプルとも、smallの答えとも比較。合ってる。
  • 一応、large実行後に出力ファイルを覗いてみる。
    • DP配列の初期化に使った値INFが出力されてる問題が何個かある。
  • アブね…。INFの値を十分大きくして実行しなおし、提出。largeも通ってた。

A : Elegant Diamond

問題:与えられたダイヤをx方向y方向に線対称にするために必要なダイヤの拡張量を調べる

  • どうする時が最小なのか良く分からない。
  • 元から対称な部分は使うんだろうなぁ…と思い、とりあえずそれを調べるコードを書く。
  • が、それすら合わないという惨劇。
  • 迷走を繰り返すうちにタイムアップ。Dなんて無かった。
  • 終了時点でスコアボードを見ると530位くらい。詰んだか…。
  • -

結果 /xx/oo/ox/xx/ 31pt, 464位

詰んだと思いきや、largeのテストの結果として順位が上がり、500位以内に入りました。
31ptの層がかなり厚いので、結果として時間での勝負になってたようです。ギリギリだなぁ…。

とはいえ、せっかくチャンスを頂けたので次も頑張ってこようと思います。