Toy と帽子と ADP BE

主にプログラミングに関わる話をゆるくエモくやっていきます

エクサウィザーズプログラミングコンテスト2021(AtCoder Beginner Contest 222)

4完。Dに1時間かけてしまった・・・。

各問題

A - Four Digits

自分はnをstringで受け取って文字数を取って、4 - 文字数分の'0'を前につけるとしました。

まあ(言語にもよりますが)フォーマット出力系の関数を使うのが正道だと思います。

B - Failing Grade

単純にループを回してPとa_iを比較していくだけです。

C - Swiss-System Tournament

愚直にシミュレーションして間に合うのでそうします。

順位はpriority_queueで管理するのがやりやすいと思います。(indexは符号を反転させる)

Cのわりに実装重め?

D - Between Two Arrays

どうみてもDはDPのDということで、DPをすればいいです。

つまり、サンプル1の場合初手がdp[1] = {0, 1, 1, 0, 0, ..., 0}となり、dp[2][1]へはdp[1][1, 1]の範囲から分配できるのでdp[2] = {0, 1, 0, 0, 0, ..., 0}、dp[2][2]へはdp[1][1, 2]の範囲から分配できるのでdp[2] = {0, 1, 2, 0, 0, ..., 0}、という具合です。

ただし、愚直にやるとN3かかります。なので、都度累積和を取るようにして分配できる範囲の数の合計をO(1)で取り出せるようにします。これでO(N2)が達成できます。

添字の計算にミスというか勘違いがあって、サンプル2だけが合わずかなり時間をロスしてしまいました。

E - Red and Blue Tree

なにもわからない・・・。

まとめ

水色復帰どころか、レート下がってしまいました。落ち着きが相変わらず足りません。

f:id:mdstoy:20211009230338p:plain