蓝桥杯第13届python B组:7.全排列的价值

题目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=ajj<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 2n106

输入样例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)

知识点

  1. 对数字阶乘的感知力

  2. 数据比较大的时候需要进行模运算,注意如果涉及到整除,需要利用模逆元
    比如ans = ans * new // 4 % mod 是错误的,因为模运算不支持除法,必须用乘以 逆元 代替除法:
    inv=pow(4,mod-2,mod)

    蓝桥杯笔记蓝桥杯备赛笔记

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值