公式推导
对于给定的某个序列 s,且序列 s 中的元素两两不等,设 s 的反转序列为 ˉs. 记 I(s) 为序列 s 的升序对构成的集合,D(s)为序列 s 的降序对构成的集合. 任取序列 s 中的一个元素对 (a,b),一定有 (a,b)∈I(s)∨(a,b)∈D(s),因此,升序对与降序对的总个数等于元素对的总个数,即 ∣I(s)∣+∣D(s)∣=n(n−1)2.
设 (a,b) 是序列 s 中的一个升序对,则 (b,a) 一定是序列 ˉs 中的一个降序对,反之亦然. 因此,D(s)=I(ˉs),故 ∣I(s)∣+∣I(ˉs)∣=n(n−1)2.
设 1−n 的所有全排列构成的集合为 P,显然 ∣P∣=n! 且本题的答案 V(P)=∑s∈P∣I(s)∣.
设 ˉP= { ˉs∣s∈P },由于一个全排列的逆序序列仍是全排序,因此 P=ˉP,由此可知 V(P)=V(ˉP)=12(V(P)+V(ˉP))
=12(∑s∈P∣I(s)∣+∑ˉs∈ˉP∣I(ˉs)∣)=12∑s∈P(∣I(s)∣+∣I(ˉs)∣)
=12∑s∈Pn(n−1)2
=14n(n−1)n!
Python语言描述
MOD = 998244353
INV = 748683265
n = int(input())
res = n * (n - 1) % MOD
for i in range(2, n + 1):
res = (res * i) % MOD
res = (res * INV) % MOD
print(res)