DDCC 2019

コード部門

  • A: なんかバグった、素直にD言語のgroup関数を使うべきだったかも、遅かった
  • B: 平衡二分木使うか悩んだけどしばらく考えたら貪欲で普通に解けた、遅かった
  • D: もう典型、segtree.hとmatrix.hを貼って終わり、速かった
  • C: みんな解法は簡単というけどそんなことない気がする、実装の方は2ヶ月後にICPC WF行く人幾何担当がこれを解けないとチームをクビになる、でも遅かった(は?)
  • E: コンテスト開始からチマチマ考えていた、1080までは見えていて、残り時間との兼ね合いでそこで諦めることにした、見積もりを間違えてて1110が取れた、速かった

DISCOの人が順位表の凍結にこだわっていそうだったので、せっかくだからすっとぼけることにした。

昼食の時はCが大変なことになって終わった(終わったとは当然文字通り問題が終わった=ACという意味です)とか、Eも提出だけはした(提出した結果0点だったとは言っていない)とか言ってた

装置実装部門

予選: なぜか壮大なものを実装しようとしていたが、そもそも正の点数を取ることすら相当難しいと気づいて方針転換。これが幸いしてギリギリ滑り込めた

10位に入れていそうだったので、予選が終わった後の休憩時間ではすぐに本戦のためにプログラムを改善開始

本戦はesper力、観察力、実装力、盤外戦術力みたいなのが全部問われる不思議なコンテストだった

pre本戦:

  • 向こうの口ぶり的に最速で移動するとどうせ大変なことになる設定なんだろう
  • 最高速を減らすことのメリットが少なすぎる、いじるべきは加速減速時間のみでいいだろう
  • 普通に実装すると45度移動になるが、水をこぼさないように運ぶなら明らかに直線的に動くべきだろう
  • AとかBに移動するとき、真下まで行かずにちょっと前で止まると少しだけお得
  • pre本戦は自分の挙動を確認する以上に、他人の挙動を確認するのが大事だろう
  • submissionの点数を見ることで、n週ギリギリの調整が出来る

あたりには気づいていて、これらを踏まえて適当に良さそうなのを実装して、pre本戦は紙とペンを持って気づいたことをなんでもメモを取ることにした

また、pre本戦ではわざとダメなの送って気づいたことを秘匿しようかとも思ったけど、ぶっつけ本戦で挙動が終わるリスクを考えたら素直に送った方がいいと判断した

以下はpre本戦中の考察や、人を見て気づいたこと

  • E -> Aは水がないんだから最速で移動すればいい(また、A -> Bは水が少ないから少し早くてもいい)
  • AとかBに移動するとき、真下じゃなくてちょっと前で止まると少しだけお得だが、ここでギリギリを攻めると水がうまく給水できずに零れる
  • 4週しかない、5週は時間的にまず不可能だろうし、3週だと水が少なすぎる気がする
  • pre本戦でもっと情報を収集するべきだった(sugimは各週ごとに速度を変えて水のこぼれ具合を調べていた)

また、自分のコードはほとんど自分の予想通りに動いていることが確認できて嬉しかった、特に直線的に動けているかは不安だったので

これを踏まえて、その後の実装タイムでは

  • まずは、E -> Aの速度をmaxにし、A -> Bの加速度はB -> Eの2倍にすることにした(水量が半分だから)
  • 5週でまともな量は運べないだろうこと、3週だとどれだけ上手くやっても4週に勝てないだろうことを確認
  • 理論値480では勝てないだろうと予想して、理論値と加速度のバランスを雰囲気で調整していくことに
  • ↑pre本戦一位(自分)が水をかなりこぼしていたのに435であったことを加味すると、450 ~ 460程度は平気で出るだろうと予想した
  • また、ここらへんでA -> Bの加速度が2倍ではお話にならないことに気づく(ビーカーの形的に水量が半分でも水位は結構高くなる)、謎の仮定(めちゃくちゃでした)を置いた計算の結果1.43(1 / 0.7)倍にすることにした
  • 理論値528で挑むことにした、理由は特になくて、注ぐ時間を100ms刻みで選ぶと480, 504, 528, 552になるんだけど、504だと流石にしんどいだろう & 552は欲張りすぎだろうみたいな判断から)

結果は予想より全然水がこぼれず500.5になった、preよりこぼした量が減ったというのは驚きで、多分もっと理想の理論値は上だったっぽい(下手したら552まで行くかも)