Hewlaの競プロ記

競プロ記です。

SoundHound Inc. Programming Contest 2018 -Masters Tournament- 予選 C, D - 解説

今回は30歳以上の方の枠が広いプロコンでした。かつて競プロですごく強かったみたいな人がでていらっしゃっていてかっこよかったです。憧れる〜

コンテストサイトです。
SoundHound Inc. Programming Contest 2018 -Masters Tournament- - AtCoder

C - Ordinary Beauty

n^mとか出てきて一瞬ドン引きします。1000000000^{1000000000}なんかC++では扱えません。でも平均というからには分母にn^mがくるはずです。なんとなく分子にn^{(something)}がくるときれいに割り切れてくれて幸せになれそうです。

真面目な考察

真面目に考えていきます。
手元で計算をします。分子には全ての数列の美しさの総和をつっこんでやらねばなりません。これを考えます。

k項と第k+1項によってつくられる美しさの和を全てのkについて足せば、全ての数列の美しさの総和を考えることができます。

k項と第k+1項の差がdとなるような「第k項と第k+1項の数の組」は、

  • d>0のとき 2(n-d)
  • d=0のとき n

組あります。

次に、第k項と第k+1項が美しいような数列の数を求めます。
k項と第k+1項の差がdとなるとき、他のm-2項はなんでもいいので、これを満たすような数列の数は

  • d>0のとき 2(n-d)n^{m-2}
  • d=0のとき n\times n^{m-2} = n^{m-1}

です。
これは、第k項と第k+1項によってつくられる美しさの総和と等しいといった言い方もできそうです。

長さmの数列で隣り合う2数はm-1組あるので、美しさの総和は

  • d>0のとき 2(n-d)(m-1)n^{m-2}
  • d=0のとき (m-1)n^{m-1}

となります。

あとはこれをn^mで割ります。答えは

  • d>0のとき \frac {2(n-d)(m-1)n^{m-2}}{n^m} = \frac {2(n-d)(m-1)}{n^2}
  • d=0のとき \frac {(m-1)n^{m-1}}{n^m} = \frac {m-1}{n}

です。

ビジュアライズ的な

この画像を見ればわかる場合とわからない場合があるぞい

f:id:hewla:20180710142141j:plain
①×②×③が美しさの総和となります

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まで移動するのにかかる円の最小値をyen_i、都市iから都市tまで移動するのにかかるスヌークの最小値をsnuuk_iとします。
i年目の答えans_iは新しく使えるようになった両替所を経由する答えと1年後の答えの良い方なので、
ans_i = max(ans_{i+1},  10^{15} - (yen_{i+1} + snuuk_{i+1}))
となります。この漸化式を、n-1年後から順に埋めていけば良いです。

yen_iはsを始点としたダイクストラ法1回で全てのiについて求めることができます。
また、鉄道はどこも双方向に走っているので、snuuk_iはtからiまでにかかるスヌークの最小値に等しいです。したがって、tを始点としたダイクストラ法で求められます。

ダイクストラ法を実装したのはJOI以来です。というより実装を真面目にやったのがすごく久しぶりな気がします。思い通りに動いた時はやっぱり楽しいです。

Rating 2000以下はratedでした。青になりたい人向けコンテストみたいな感じです。またやってほs
全完して爆上げのつもりでしたがEが解けませんでした。A〜Dの4完でレートはなんとか上がってくれました。
f:id:hewla:20180708120101p:plain
perf:1896で、1483 → 1532 (+49)です。次回で青もあり得る!!!(しかしAGC)