この記事で使うアルゴリズム
逆元
はじめに
カテゴリー競プロ初中級者100問では、Qiitaにて@e869120さんがレッドコーダーが教える、競プロ・AtCoder上達のガイドライン【中級編:目指せ水色コーダー!】としてまとめられている100問をPythonで解いています。
全問題の一覧はこちらです
問題
https://atcoder.jp/contests/abc145/tasks/abc145_d
この問題では逆元の計算が求められます。
方針
組み合わせの問題として解くことができます。 以下の値を計算すれば良いことになります。
1 | W = X - ((X+Y)//3) |
階乗の部分が巨大になるため、計算途中で剰余の計算を行います。しかしながら、除算が含まれるため逆元と呼ばれる概念を導入する必要があります。
逆元については以下の問題の解説をご覧ください。
ポイント
- 移動可能な必要十分条件
- 移動による座標の変化は
(+1,+2)または(+2,+1)で、スタートは(0,0)であるため、X+Yは3の倍数である必要があります。 - また、
(+1,+2)の移動をn回繰り返した場合は(n,2n)に、(+2,+1)の移動をn回繰り返した場合は(2n,n)になることから、2min(X,Y) >= max(X,Y)である必要もあります。
- 移動による座標の変化は
コード
1 | MOD = 10**9+7 |
記事情報
- 投稿日:2020年5月2日
- 最終更新日:2020年5月8日