今回は30歳以上の方の枠が広いプロコンでした。かつて競プロですごく強かったみたいな人がでていらっしゃっていてかっこよかったです。憧れる〜
コンテストサイトです。
SoundHound Inc. Programming Contest 2018 -Masters Tournament- - AtCoder
C - Ordinary Beauty
とか出てきて一瞬ドン引きします。なんかC++では扱えません。でも平均というからには分母にがくるはずです。なんとなく分子にがくるときれいに割り切れてくれて幸せになれそうです。
真面目な考察
真面目に考えていきます。
手元で計算をします。分子には全ての数列の美しさの総和をつっこんでやらねばなりません。これを考えます。
第項と第項によってつくられる美しさの和を全てのkについて足せば、全ての数列の美しさの総和を考えることができます。
第項と第項の差がdとなるような「第項と第項の数の組」は、
- のとき
- のとき
組あります。
次に、第項と第項が美しいような数列の数を求めます。
第項と第項の差がdとなるとき、他のm-2項はなんでもいいので、これを満たすような数列の数は
- のとき
- のとき
です。
これは、第項と第項によってつくられる美しさの総和と等しいといった言い方もできそうです。
長さの数列で隣り合う2数は組あるので、美しさの総和は
- のとき
- のとき
となります。
あとはこれをで割ります。答えは
- のとき
- のとき
です。
D - Saving Snuck
変わった通貨が出てきました。問題文読解がちょっとややこしくて戸惑いました。日本語が苦手。
0年目はどこで両替してもいいのでパターンがたくさんありそうで大変です。しかし、n-1年目は両替を都市nで行う必要があります。この年においては、
- sからnまで円で移動
- nからtまでスヌークで移動
ということになります。sからnに使う円とnからtに使うスヌークの最適解はダイクストラ法を用いると求められます。
n-2年目はn-1年目に比べて、都市n-1の両替所も使えるようになります。そうすると、先ほどの場合に加えて、都市n-1の両替所を経由して移動するパターンを考えて、この2パターンのうち答えの良い方を選んで答えとすればいいです。
同様に、n-3年目には都市n-2の、n-4年目には都市n-3の、...、1年目には都市2の、0年目には都市1の両替所が新しく使えるようになります。
都市sから都市iまで移動するのにかかる円の最小値を、都市iから都市tまで移動するのにかかるスヌークの最小値をとします。
i年目の答えは新しく使えるようになった両替所を経由する答えと1年後の答えの良い方なので、
となります。この漸化式を、n-1年後から順に埋めていけば良いです。
はsを始点としたダイクストラ法1回で全てのiについて求めることができます。
また、鉄道はどこも双方向に走っているので、はtからiまでにかかるスヌークの最小値に等しいです。したがって、tを始点としたダイクストラ法で求められます。
ダイクストラ法を実装したのはJOI以来です。というより実装を真面目にやったのがすごく久しぶりな気がします。思い通りに動いた時はやっぱり楽しいです。
Rating 2000以下はratedでした。青になりたい人向けコンテストみたいな感じです。またやってほs
全完して爆上げのつもりでしたがEが解けませんでした。A〜Dの4完でレートはなんとか上がってくれました。
perf:1896で、1483 → 1532 (+49)です。次回で青もあり得る!!!(しかしAGC)