ARC141

2完。ARCのわりに緊張感なくて脳内BGMは直前にやった「心予報」だった。あんまり期待もしてなかったからABをつまらないとも感じなかったな。黄コーダーとしてARCの土俵に乗れないつまらなさに覆われている。

A - Periodic Number

最大値を与える数がmを2回以上繰り返したものとして、mの桁数と何回繰り返すかを全探索。答えがNと同じ桁数にならないときが面倒だと思っていたが、サンプルが合わなくて気づいたけどそもそもNより桁数が1少ない99999みたいのが自明が下界になっている。つまりNと同じ桁数だけ考えればいい。mの桁数としてはNの約数だけ考えればいい。桁数や繰り返し回数が確定しているので、100010001000みたいのを生成してN以下ならNを100010001で割って掛ければいい(桁数が違うとここであふれることがありサンプルが合わなかった)。おおまかな方針はすぐ立つが、詰めるのがかなり難しい。

B - Increasing Prefix XOR

Bが狭義単調増加ということは、Aで上位から見て最初に立っているビット位置はBで0じゃないといけない。Aも狭義単調増加なので、結局Bの(2進法での)桁数もAの桁数も狭義単調増加。NがMの桁数より大きかったら答えは0。そうでないとき3乗(高速化もできそうだけど60だから3乗でいい)のDPができる。Aの最上位以外のビットはどうでもよくて、桁数がMと同じときだけM以下だけ数える。特に難しくないけど慣れないDPは時間がかかる。

C - Bracket and Permutation

Sが与えられたときに辞書順最小を求めるのは簡単で(実装は時間かかったけど)、閉じ括弧が多くならない範囲で貪欲に取っていけばいい。順列を012345から変化させる方法は、開き括弧しか選べない状況で開き括弧を後のほうに置くしかない。0-indexedで偶数番目に注目し、それは024以上でないといけなくて、より大きかったときはその部分のSは決まる。偶数番目も奇数番目も単調増加である必要はもちろんある。で、これを前後から組み合わせる。無理では。ただ、制限がない場所は"()"で埋めていい気もする。PとQの主張をぶつけて空いた場所を埋める?というか上書きして最後にPとQが生成されるか確認すればいいか?ということで時間もないしとりあえず書いてみる。コンテスト中にギリギリ間に合わなかったが提出してWA。上書きというか全部書き込んでたからQだけやってたな(Pを使わず生成してた)。1時間あったので時間が足りないという感じでもなく、また、その1時間暇にはならずに済んだ。こういうの通せないんだよなあ。そこまで非現実的な難しさではないと思うんだけど、本当に力不足。