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
なにもわからない・・・。
まとめ
水色復帰どころか、レート下がってしまいました。落ち着きが相変わらず足りません。