题目1 全排列的价值
对于一个排列 A=(a1,a2,···,an),定义价值 ci 为 a1 至 ai−1 中小于 ai 的数的个数,即 b i = ∣ a j ∣ j < i , a j < a i ∣ b_i =|{a_j|j<i,a_j<a_i}| bi=∣aj∣j<i,aj<ai∣。
定义 A 的价值为 ∑ i = 1 n c i \sum_{i=1}^{n} c_i ∑i=1nci。
给定 n,求 1 至 n 的全排列中所有排列的价值之和。
输入格式
输入一行包含一个整数 n。
输出格式
输出一行包含一个整数表示答案,由于所有排列的价值之和可能很大,请输出这个数除以 998244353 的余数。
数据范围
对于 40% 的评测用例,n≤20;
对于 70% 的评测用例,n≤5000;
对于所有评测用例,
2
≤
n
≤
1
0
6
2≤n≤10^6
2≤n≤106。
输入样例1:
3
输出样例1:
9
样例1解释
1 至 3 构成的所有排列的价值如下:
- (1,2,3):0+1+2=3;
- (1,3,2):0+1+1=2;
- (2,1,3):0+0+2=2;
- (2,3,1):0+1+0=1;
- (3,1,2):0+0+1=1;
- (3,2,1):0+0+0=0;
故总和为 3+2+2+1+1=9。
输入样例2:
2022
输出样例2:
593300958
思路
找规律:
KaTeX parse error: Undefined control sequence: \* at position 8: n=3, 3\̲*̲1+2\*2+1\*2+0\*…
KaTeX parse error: Undefined control sequence: \* at position 8: n=4, 6\̲*̲1+5\*3+4\*5+3\*…
KaTeX parse error: Undefined control sequence: \* at position 9: n=5, 10\̲*̲1+9\*4+8\*9+7\*…
很快就发现,KaTeX parse error: Undefined control sequence: \* at position 13: ans=\frac{n!\̲*̲(\frac{n*(n-1)}…
python代码
n=int(input())
mod=998244353
ans=1
for i in range(n,0,-1):
ans=ans*i%mod
new=n*(n-1)
inv=pow(4,mod-2,mod)
ans=ans*new%mod
ans=ans*inv%mod
print(ans)
知识点
-
对数字阶乘的感知力
-
数据比较大的时候需要进行模运算,注意如果涉及到整除,需要利用
模逆元
比如ans = ans * new // 4 % mod
是错误的,因为模运算不支持除法,必须用乘以 逆元 代替除法:
inv=pow(4,mod-2,mod)
蓝桥杯笔记:蓝桥杯备赛笔记