Remainder Reminder
ARC091-D "Remainder Reminder"
あけましておめでとうございます.
提出コード
考察
下の図のような表を自分は書きました.
これは入力が
のときの表です.
見方としては,を決めたときに条件を満たすを右に書き並べていったものです.
なお,考察がしやすいようより大きいも一部書いています.
(を書き込む欄がありますが,割りに相当するのでありえないです.表を修正するのが面倒だったのです.)
を固定して考えてみます.(図ではを取り上げてみました.)
・のとき
上から順にをで割った余りを見ていくと,
と循環しているのがわかります.(当然ですが)
循環している塊ごとに赤枠で分けました.
一つの塊内には当然つの数字が存在します.
この赤枠内で条件を満たすの数は,個です.
( 個中個が条件を満たさないので )
そして以下で繰り返しの赤枠の総数は,個です.
( 個の整数を個の塊ごとに見ているので )
よって,繰り返し分の中で条件を満たすの個数は個です.
もう一歩考えることがあるのですが,では考えにくいので次にいきます.
・のとき
上と同様に考えると,赤枠内で条件を満たすの数は個.
繰り返しの赤枠の数は個.
よって,繰り返し分の中で条件を満たすの個数は個です.
では飛ばしたものを考えます.
図を見ればわかりますが,繰り返しが終わった後の赤枠(途中で途切れている)内にも残っているのが確認できます.
赤枠の繰り返しが終わったとき,残りのの候補の数はです.
このうち,個は条件を満たさないので,候補の数から引くことで,を得ます.
よって赤枠の繰り返し分と合わせて,のときの条件を満たすの数はです.
一般化します.
を固定したとき,赤枠の繰り返し数は,です.
その各々に対して,赤枠内の条件を満たすの数は個です.
よって,繰り返し分の赤枠で考えると,個だけあります.
ただし,となることもあるので, max とします.
残りは繰り返しからはみ出たやつらです.
残りのの候補数はです.
そのうち,個が条件を満たさないので,です.
ただし,となることもあるので,maxとします.
これをからまで順に足していけばで答えが出ます.
のときだけ上記の方法ではうまくいきません.
でもでは全ての組み合わせで条件を満たすので,を出力すればOKです.
感想
年内にACはしていましたが忙しくて記事にはできませんでした.
なかなか面白い問題でしたね.
良いところまでは気づいていましたが,最後の細かい詰めは知り合いに助けてもらいました.
整数の問題は好きなので得意になりたいです.