結果
問題 | No.1392 Don't be together |
ユーザー |
![]() |
提出日時 | 2025-02-09 04:30:00 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 731 ms / 2,000 ms |
コード長 | 706 bytes |
コンパイル時間 | 455 ms |
コンパイル使用メモリ | 82,136 KB |
実行使用メモリ | 114,068 KB |
最終ジャッジ日時 | 2025-02-09 04:30:14 |
合計ジャッジ時間 | 10,420 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 27 |
ソースコード
n,m=map(int,input().split()) p=list(map(int,input().split())) for i in range(n): p[i]-=1 M=998244353 fa=[1] for i in range(1,n+1): fa+=[fa[-1]*i%M] fb=[pow(fa[n],M-2,M)] for i in reversed(range(1,n+1)): fb+=[fb[-1]*i%M] fb.reverse() v=[0]*n o=[] for i in range(n): if v[i]==0: o+=[0] s=i while v[s]==0: v[s]=1 o[-1]+=1 s=p[s] def solve(k): q=[[0,0] for i in range(n+1)] q[1]=[k,0] for i in range(2,n+1): q[i][0]=q[i-1][1] q[i][1]=q[i-1][0]*(k-1)+q[i-1][1]*(k-2) q[i][0]%=M q[i][1]%=M a=1 for v in o: a*=q[v][1] a%=M return a a=0 for i in range(2,m+1): a+=solve(i)*fa[m]*fb[i]*fb[m-i]*((-1)**((m-i)%2)) a%=M print(a*fb[m]%M)