Pythonで解くAtCoder(ABC175:C)
こんにちは、クルトンです!
この記事では
AtCoderの「AtCoder Beginner Contest 175」のC問題をPythonを使って解説します。
問題のリンクを載せておきます。
解法
まず、左右対称性に注目すると
のときとのときの答えが等しいことがわかります。
よってここからはとしてのときについて考えます。
絶対値が最小となるような移動後の座標について考えてみましょう。
・が小さいとき(のとき)
図の黄色丸は、K回目の移動後に止まる可能性がある座標を表し、
水色丸は、K回目の移動中に通ることができるが、K回目の移動後には止まる可能性がない座標を表し表しています。
この場合、K回の移動では0にたどり着かないため、が答えとなります。
・が大きいとき(のとき)
この場合は2パターンに場合分けができます。
パターン1
このときは、0以上の座標にある黄色丸の方が0に近いため、答えはをで割った余り()となります。
パターン2
このときは、0以下の座標にある黄色丸の方が0に近いため、答えはをで割った余りをから引いたもの()となります。
この2パターンのうちどちらに該当するかは、との偶奇が同じか、つまりが0か1かによって判断することができます。
以上のことを実装すればで解くことができます。
まとめ
今回は
- 対称性に注目する
- 答えの座標に対応して場合分けをする
という問題でした。
ではまたお会いしましょう!さようなら~