#define long long long

akouryy's programming blog

JOI2015-2016 予選参加記

気づけば今年もあと少し、JOI予選の季節です。
JOI2014-2015 春合宿に参加したので予選は免除されますが、自分の実力を確かめるため、また図書券を手に入れるために参加しました。


C++ソースコードの前提

模擬予選

540点だった。

5番まで1h18mしかかからなかったのに残り1h42mで6番を解けなかった。駄目。
6番の入力2は手で解くことの大切さを教えてくれた。

予選

まず4~6を読んだあと、1から順番に解いた。

1 科目選択

やるだけ。 O ( 1 )

ソースコード

13:12

2 ゼッケン

やるだけ。 O ( M N )

ソースコード

13:16

3 ハラショー

全探索。 O ( M N^3 )

ソースコード

13:23

4 おさんぽ事情

会話地点をリストアップして各Xについて二分探索。 O ( N + Q \log N )
必ず A_i \not= A_jなので家から1m以上歩くことになり、lower_boundupper_boundの細部は気にしなくていい。
f:id:akouryy:20151214002248p:plain

ソースコード

13:51

5 ことうぐらし!

幅探索→宿泊料金をコストにダイクストラ O ( N + M log M )
priority_queueへのpushを負値でやるタイプの人間。
シェルターは宿泊費不要。

ソースコード

14:21

6 屋台

現在地とその周囲(上、右上、右、右下、下、左下、左)について既に買ったかどうかを条件にしたbitDP。 O ( 2^8 H W )
f:id:akouryy:20151213233000p:plain
実際は右、右下、下は絶対にまだ買っていない状態なので O ( 2^5 H W )でできるっぽい。この場合は境界が面倒なので番兵を使うことになるかな。
f:id:akouryy:20151213233006p:plain

58行目(0, 0,(e, g,と書くバグで1時間潰した。
15:49
dp[1001][1001][256]bad_allocになった。dp[2][1001][256]を使う処理に書き換える。

ソースコード

15:54

一通り提出ミスチェックをして競技終了。

その後

JOI 2015/2016 予選 問題文・採点用入出力・解説 の出力ファイルに完全に一致しました。
提出ミスがなければ600点(全完)です。図書券くれ。

2015/12/17追記: 全完でした。お世話になった皆さんありがとうございました!

全くググらずor蟻本を読まずに解けるようになったのは成長といった感じで良さがありました。
これからもがんばるぞい!