题目名称 | 2717. Counting swaps |
---|---|
输入输出 | Count_swap.in/out |
难度等级 | ★★★ |
时间限制 | 1000 ms (1 s) |
内存限制 | 64 MiB |
测试数据 | 2 |
题目来源 | LGLJ 于2019-09-24加入 |
开放分组 | 全部用户 |
提交状态 | |
分类标签 | |
分享题解 |
通过:3, 提交:5, 通过率:60% | ||||
LGLJ | 100 | 0.365 s | 2.16 MiB | C++ |
darkMoon | 100 | 0.492 s | 8.15 MiB | C++ |
op_组撒头屯 | 100 | 0.509 s | 2.26 MiB | C++ |
op_组撒头屯 | 50 | 1.000 s | 2.26 MiB | C++ |
darkMoon | 0 | 0.512 s | 7.89 MiB | C++ |
关于 Counting swaps 的近10条评论(全部评论) |
---|
给定一个 $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$。
每个测试用例输出一个结果,每个结果占一行。
3 3 2 3 1 4 2 1 4 3 2 1 2
3 2 1
$1≤n≤10^5$
【IPSC 2016】