AtCoder の問題を Rust で解いていきます。AtCoder も Rust も初心者ですが、温かい目で成長を見守っていただけるとありがたいです。
今回は、競プロ典型90問の046 - I Love 46(★3)を解きました。
つの長さ の数列 から、 を満たす が何通りあるかを求める問題です。
となる性質を利用するそうです。まず、数列 の全要素に対して で割った余りを求めます。次に、それら余りが何個あるかを数えます。余りとその個数を求め、HashMap
にする関数を vec2hashmap_mod46_counter()
としました。この関数を動作確認用に少し改変したものが下のコードです。
このように HashMap<余り, 個数>
とすれば、あとは
のようにして答えを求めることが出来ます。
itertools::iproduct!
が便利