ブログ名

競技プログラミングやお歌のお話をする高菜です。

Ozon Tech Challenge 2020 (Div.1 + Div.2, Rated, T-shirts + prizes!) 解法

コンテストページ:https://codeforces.com/contest/1305

✔A - Kuroni and the Gifts (00:11:02)

参加登録を忘れて 10 分間提出ができませんでした。おそらく 5 分程度でした。 配列 a, b をそれぞれソートすると良いです。

✔B - Kuroni and Simple Strings (00:29:19)

毎回好きなだけ消しましょう。 各場所より後ろにある ')' の個数を後ろから決めていきます。 前から見て、'(' をどんどん消していきましょう。 ')' の個数より多く消してしまいそうになったら思いとどまります。 かならずどこかで、「同じ数」が来ますから、そこで折返しです。

✔C - Kuroni and Impossible Calculation (00:55:07)

まず、余りが等しいものがあれば 0 です。 そうでない場合は N <= mod ですから、愚直が通ります。

って、気がつくのが遅すぎませんか!?!? 左から見てあまりの重複度付きチェックリストを管理をしていました。

✔D - Kuroni and the Celebration (01:28:16)

直径を選ぶと、候補がどっと消えます。

コンテスト後に twitter を覗いてみて知ったのですが、毎回葉を消せば間に合うではありませんか!!

✔E - Kuroni and the Score Distribution (01:56:03)

まず、(nn-2n+n%2)/4 が最大です。それ以下はすべて作れます。 基本的にすべて 1 万の倍数で作って、いらないものは 5000 〜 9999 に押し付けます。 1 万で割りましょう。 1,2,3,4,...,n の安定感を a[i] おきましょう。 m<=a[i] なる最小の i をとりましょう。1,2,3,...,i です。 これでは大きすぎますね。 そこで、a[i]-m だけ、末項 i を増加させて、完成です。

✖F - Kuroni and the Punishment

公約数が 2 のときを考えると、このときのコストは高々 n ですから、どの項も n より多く動かす必要はないことがわかります。 そこで、a[0] ± n の素因数をすべてトライです。 ただ、これでは約数列挙が間に合いません。しかし、自分自身以外の素数は 100 万以下であることがわかりますから、100 万以下を全て投入してしまいましょう。出血大盛り大サービスです。

これで候補は 100 万ちょっとになったので、これを愚直にトライです。 間に合うか自信はないのですが、大きい順にためしていって、もうダメだと思ったら早めに切り上げる枝刈りを入れたら間に合いそうな雰囲気はあります。どうなのでしょう。