Luogu8143 solution
Problem
link->https://www.luogu.com.cn/problem/P8143。
Solution
很明显,排列 \(p\) 的生产图要么为偶环图,要么为奇环图。
引理:如果 \(p\) 的生产图为偶环数,那么交换其中任意两项 \(a_i\) 和 \(a_j\),新的排列 \(p_1\) 的生产图为奇数环,反之亦然。
证明:设交换前共 \(x\) 环,则有两种情况:
- 如果两点处于同一环,交换则后该环分裂成两个环,因为原图有边无项边 \((i,a_i)\) 及 \((j,a_j)\) 处于同一环中,如交换则变成 \((i,a_j)\) 及 \((j,a_i)\) 原来的环的两条边断裂,而新的两条边则又形成两个封闭环形。此刻有 \(x+1\) 个环。
- 如果两点不处于同一环,交换后该环合并成同一环。原因同上。此刻有 \(x-1\) 个环。
由于 \(x\) 和 \(x-1\) 或 \(x+1\) 的奇偶性不同,故成立。
证毕。
\([1,n]\) 的所有排列共有 \(n!\) 种,而交换每个排列的其中两项该图奇偶性改变,则偶图(或奇图)的个数为 \(\frac{1}{2}n!\)。
Code
#include<bits/stdc++.h>
#define int long long
const int MOD=998244353;
signed main() {
int ans=1,n;
scanf("%lld",&n);
if(n==1) return 0&puts("0");
for(int i=3;i<=n;i++)
ans=ans*i%MOD;
printf("%lld",ans);
return 1;
}