【阶段1】【组合数学】计数交换

Description

【题意】
给定一个 1~n 的排列 p1,p2,…,pn,可进行若干次操作,每次选择两个整数 x,y,交换 px,py。
设把 p1,p2,…,pn 变成单调递增的排列 1,2,…,n 至少需要 m 次交换。
求有多少种操作方法可以只用 m 次交换达到上述目标。
因为结果可能很大,你只需要输出结果对 10^9+9 取模之后的值。
例如排列 2,3,1 至少需要2次交换才能变为 1,2,3。操作方法共有3种,分别是:
方法一:先交换数字2,3,变成 3,2,1,再交换数字3,1,变成 1,2,3。
方法二:先交换数字2,1,变成 1,3,2,再交换数字3,2,变成 1,2,3。
方法三:先交换数字3,1,变成 2,1,3,再交换数字2,1,变成 1,2,3。

【输入格式】
第一行包含整数T,表示一共有T组测试用例。
每个测试用例前都会有一个空行。
每个测试用例包含两行,第一行包含整数n。
第二行包含n个整数,表示序列p1,p2,…,pn。

【输出格式】
每个测试用例输出一个结果,每个结果占一行。

【数据范围】
1≤n≤10^5

【输入样例】
3

3
2 3 1

4
2 1 4 3

2
1 2

【输出样例】
3
2
1
 

思路:

对于一个排

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值