- 1~n的全排列有
n!
种 - 对1~n中的两个数a,b(a < b), 所有排列中有12是a在b前面
综上可得:ans=C2n⋅n!⋅12
时间复杂度: O(n)
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const ll mod = 998244353;
int main () {
ll n; cin >> n;
ll ans = 1;
//计算 阶乘除以2
for(int i = 3; i <= n; i++) {//从3开始是因为在这一步直接将2除掉了, 避免除法
ans = (ans * i) % mod;
}
//乘以C(2, n)
ans = (ans * ((n * (n - 1) / 2) % mod)) % mod;
cout << ans << endl;
return 0;
}
跪服
不过仔细一想,如果是这个思路的话,本质是A2n∗n!
orz
为什么在后面/2就会错
因为模之后的数除以2就要用逆元了
谢谢佬
nb
tql
ORZ!
好解法