hos' Xmas Contest 2010

  • 研究室から参戦しよう
    • 大学まで歩いても十分間に合う時刻に家を出る
  • 雪がひどくて全然進めない
    • 駅前からバスに乗ろう
      • 毎時40分に駅前発だったよね
  • ダイヤ改訂されてて乗り過ごした...
    • 次のバスは15時
      • 歩くか...
  • 30分遅れで到着。
    • Imo Judgeが503
      • 仕方ない、夜の部に出よう
  • 大学で用事を済ませて20時過ぎに帰りのバス停へ
    • バス来ない
      • バス来ない
        • 寒い
          • バス来ない
            • 雪積もりすぎ
              • バス来ない
  • 30分待っても来ないので、諦めて歩こう
  • 雪ひどい
  • バスもひどい
  • おらこんな街いやだ...
  • しばらく歩いてるうちにバスに追いつかれました
    • 停留所じゃないのに乗せてくれました
      • 感謝
  • そんなわけで
  • どうにか時間通りにコンテスト開始

Problem H: Read Me

  • Aから読もうと思ってたけど、「私を読んで!」とお願いされたら断るわけにはいかんでしょうな。
    • 読んだ。これは新しい...!
  • でも他の問題読んでからじゃないと解きようがないよね。後回し。

Problem A: Christmas Trees

  • maxの時は反対側にいることにして、minの時は同じ方角にいることにする。
    • おっと、位置が異なるということはc==dのとき例外処理が要るのか。
      • トラップ回避ktkr
  • あとは算数で頑張るだけ。
    • 苦手だけどどうにかなった。
  • せっかくトラップ回避したんだから一発で通したいな。submit.
  • Accepted. よかった。

Problem B: Simple Parsing

  • Aより先に通してる人がごろごろいるんだけど、どういうことだろう。
    • しかも構文解析って。
      • と見せかけて偶奇だけなので簡単。
        • にもかかわらずintで処理しようとして1回WAった。
  • Accepted.
  • とりあえずこの辺で全問目を通してみる。
    • どれもさっぱりわからん...。
      • 部分点とはいえ、Cだけsubmitされてるなぁ。考えてみよう。

Problem C: Connect The Decoration

  • 問題を読むのに少し時間が掛かった。
  • ええとこれは...シュタイナー木?
    • 「えぬぴぃこんなん」でしたよね。
  • ...え? N < 100 ? 無理ゲーじゃね?
  • ... (5分後)
  • あ、よく見たら sum(s[i]) <= 10 って書いてあるじゃなイカ。はいはい Dreyfus-Wagner...
    • いや、使わなければならないノードではなく、使わなくてもいいノードが10個イカなのか。
  • ...Dreyfus-Wagnerより簡単じゃね?
    • 使わなくてもいいノードのうち、どれをホントに使わないかを決め打ちしたらただのMST。
  • がりがりがりがり。できた。submit.
    • No - 90% Accepted.
  • ケースごとの結果を見てみたら、見るからに定数倍でTLEしてる臭いが。
    • vectorを全部static配列にして Accepted.

Problem H: Read Me

  • 解いてる人が多いのでそろそろ手を付けてみよう。
    • ひたすらスーパー実装タイム。
      • Bとか今度こそ構文解析しないといけないのかなとgkbrしたけど、全然そんなこと無くて#を見るだけで終わった。
  • submit. No - 50% Accepted.
    • ちまちまバグを潰すけど点数は変わらない。何でだろう。
      • この問題の肝はAとGにありそうで、それ以外は適当に書いてもどうにかなる気がするのだけど...。
  • 分からないのでちょっと他の問題を眺めたりする。
    • Fは各入力10ケース、か...。
      • ...!
        • 入力ケースの数はチェックしてなかったぞ!
  • Accepted.

Problem D: Presents

  • 普通に難しそう。DPかな?
  • でもまずは単純な解法を疑ってみたい。
    • 2つ以上の店で買っても最適にならない?
      • 証明も撃墜も出来なかったのでとりあえず書いてみたらサンプルで撃墜された。
  • 普通にDPしよう。
    • dp[n][p] := 店 n にいて、プレゼントを既に p 個持っている状態での (掛かった金額) + (溜まった疲れ) の最小値、でいいかな?
      • プレゼントはたかだか M (とりあえず1000ぐらい) 個だけ買えばいいことにしておこう。
  • 愚直に実装すると O(NM^2) だけどもうちょっと減らせそう。これだと30%で、O(NM)にすると50%ぐらいくれるのだろうか。
    • もう一つ落とすのなら...
      • a[n][p] := 店 n にいて、プレゼントを既に p 個持っていて、まだ店 n では買い物してないときの最小値
      • b[n][p] := 店 n にいて、プレゼントを既に p 個持っていて、店 n で既に1個以上買い物したときの最小値
    • かな。
  • がりがりがりがり。submit. 20%。 バグを取っても30%。Mを調整しても30%。
    • あれれ...?

Problem E: Donuts

  • N <= 2 の部分点ぐらい狙えそう。
  • 楕円はキモいので1,000角形ぐらいで近似して、包除原理でエンヤトットする。
    • 凸多角形2つの共通部分は O(n) ぐらいででできるらしいけど、よく知らないので愚直にやってみた。
  • うーむ、全然精度が足りてない感じだ。
  • 実は N = 1 のケースが10%ぐらいあるんじゃね?とか期待して適当に投げたけど、現実は (というかhos先生は) そんなに甘くありませんでした。

Problem F: Christmas Magic

  • 全然考えてない。

Problem G: Strange Sequence

  • ひたすら0を吐くプログラムを送りそうになったけど、反例が見つかったので捨てました。

Result

  • 430pts / 838min, 8th place.
  • 割とよく頑張ったと思うけど、.shiomoriに負けたのが残念です。
  • 楽しかったです。お疲れさまでした。ありがとうございました。 > hos先生、imos先生