DOJ logoDOJ
問題
最近追加された問題保存した問題Workbooks
カテゴリDLCコンテストグループチーム掲示板
ランキング
正解数ランキングストリークランキングDOJ Powerランキング
提出状況
問題募集ログイン新規登録
DOJ logoDOJ

OI形式のサブタスク採点、Eloレーティング、Discord認証を備えたオンラインジャッジです。

問題
問題一覧カテゴリ
コミュニティ
コンテストランキング掲示板お知らせ外部のコンテストを開催するガイド
アカウント
ログイン新規登録ジャッジ状態
ポリシー
利用規約DLCの利用規則プライバシーAPI 文書言語ランタイムコンテストの順位報酬レーティングとパフォーマンス
© 2026 DOJ
All rights reserved
解説

Permutation

問題に戻る

解説

PPP의 사이클 분해를 생각하자. Ai2=PA_i^2=PAi2​=P이면 AiP=PAiA_iP=PA_iAi​P=PAi​이므로, 모든 AiA_iAi​는 PPP와 교환한다. 따라서 AiA_iAi​는 PPP의 사이클을 같은 길이의 사이클로만 보낸다. 그러므로 사이클 길이별로 독립적으로 세고 곱하면 된다.

길이 ddd인 PPP-사이클의 개수를 mmm이라 하자. KKK개의 순열 AiA_iAi​가 유도하는 사이클들 사이의 작용은 의 작용으로 볼 수 있다. 하나의 연결 성분에 포함되는 -사이클의 개수는 항상 꼴이다.

크기 2r2^r2r인 성분 하나를 고정된 2r2^r2r개의 사이클 위에 만드는 경우의 수를 cd,rc_{d,r}cd,r​라 하자. 그러면 다음 식이 성립한다.

ddd가 홀수이면

cd,r=[Kr]2(2r−1)!d2r−1.c_{d,r} = {K \brack r}_2 (2^r-1)! d^{2^r-1}.cd,r​=[rK​

ddd가 짝수이면 r=0r=0r=0은 불가능하고, r≥1r \ge 1r≥1에 대해

cd,r=[K−1r−1]22K−r(2r−1)!d2r−1.c_{d,r} = {K-1 \brack r-1}_2 2^{K-r} (2^r-1)! d^{2^r-1}.cd,r​=[r

여기서

[nr]2=∏i=0r−12n−i−12r−i−1{n \brack r}_2 = \prod_{i=0}^{r-1} \frac{2^{n-i}-1}{2^{r-i}-1}[rn​]2​=

는 이진 Gaussian binomial coefficient이다. 이 문제에서는 r≤log⁡2Nr \le \log_2 Nr≤log2​N이므로 KKK가 매우 커도 빠르게 계산할 수 있다.

이제 F[n]F[n]F[n]을 길이 ddd인 사이클 nnn개를 처리하는 경우의 수라고 하자. 첫 번째 사이클이 속한 성분의 크기가 2r2^r2r이면 나머지 n−1n-1n개 중 개를 고르면 된다. 따라서

F[0]=1,F[0]=1,F[0]=1, F[n]=∑2r≤n(n−12r−1)cd,rF[n−2r].F[n] = \sum_{2^r \le n} \binom{n-1}{2^r-1} c_{d,r} F[n-2^r].F[n]=2r≤n∑​

모든 ddd에 대해 이 DP 값을 곱하면 정답이다. 전체 시간복잡도는 O(Nlog⁡N)O(N\log N)O(NlogN)이다.

F2K\mathbb F_2^K
F2K​
PPP
2r2^r2r
]
2​
(
2r
−
1)!d2r−1.
−
1
K−1
​
]
2​
2K−r
(
2r
−
1)!d2r−1.
i=0∏r−1​
2r−i−12n−i−1​
−
1
2r−12^r-12r−1
(2r−1n−1​)
cd,r​
F
[
n
−
2r].