ARC009 C問題:高橋君,24歳

問題. 高橋君,24歳

写像  f \colon N \to N \left| \{i \in N \mid f(i) = i \}  \right| = n - k となるものが何通りあるかを  1,777,777,777素数)で割った余りで答えよ.ただし, N = \{1, 2, \ldots, n\} とする.

制約 2 \le n \le 777,777,777,777,777,777,  2 \le k \le 777,777

解法.包除原理

 K = \{1, 2, \ldots, k \} とする. m をどの要素の値も自分自身とならない始域と終域が  K写像全体の個数とする.このとき,求める答えは
   \binom{n}{n - k} \times m
となる. \binom{n}{n - k} は要素の値が自分自身となる要素の選び方である.

 A_i を要素  i の値が自分自身となる写像全体(始域と終域が  K)とすると包除原理から,
   m = \sum_{X \subseteq K} (-1)^{|X|} \left| \cap_{i \in X} A_i \right|
となる.ここで, |X| = j のとき  \left| \cap_{i \in X} A_i \right | = (k - j)! となるので,
   m = \sum_{i = 0}^{k} (-1)^i \binom{k}{i} (k - i)! = k! \sum_{i = 0}^{k} \frac{(-1)^i}{i!}
となる.したがって,
   \binom{n}{n - k} \times m = \frac{n!}{(n - k)!} \left( \sum_{i=0}^{k} \frac{(-1)^i}{i!} \right)
となり, \binom{n}{n - k} = n (n - 1) (n - 2) \cdots (n - k + 1) から  k 個の積となり,二項目も  k 個の和なので  O(K) 時間で答えが求まる.

計算時間 O(K)

剰数が見慣れない素数だったので,そこにポイントがあるかなと思いながら式変形をしたらポイントは  k だった.ある条件を満たす写像の個数はよく研究されているからググればあるんだろうなと思って後で調べたら高校数学だった.
 攪乱順列の公式 | 高校数学の美しい物語