A

简单

B

简单

C

每次选一对,最大的放后面,最小的放前面,问排序好一个排列的最小次数。

考虑没有动过的那些数,它们一定是一个上升子序列,且满足 \(a_{k_i}=a_{k_{i-1}}+1\)

对于其它动过的那 \(c\) 个数,容易在 \(\lceil\frac{c}{2}\rceil\) 次之内将它们排好序

操作不可逆的最小次数排序问题,可以考虑没有操作过的那些数

D

定义两个排列的乘法(复合)为 \(c=a\cdot b\)\(c_i=b_{a_i}\),给定 \(n\) 个长度为 \(m\) 的排列,对于每个排列 \(p_i\) 需要找出一个排列 \(p_j\),使得 \(p_i \cdot p_j\) 的美丽度最大,定义一个排列 \(q\) 的美丽度为一个最长的前缀的长度,满足 \(q_i=i\)

考虑一个已知排列 \(a\) 复合上另一个排列 \(b\) 后,美丽度为 \(k\) 时对 \(b\) 的要求,容易发现要求为 \(\forall i\in[1,k],b_{a_i}=i\)。就是对于 \(b\) 的一些位置,要求固定为某些数。

这并不是一个很好 check 的条件,注意到要求的数为 \([1,k]\),所有考虑排列的逆排列,要求变成了对于前 \(i\) 个位置,满足 \(b'_i=a_i\),这是一个容易检查的条件。

参考 排列变换总结 中的定义。

E

题意转化为对每个 \(m=m_1\cdot m_2\) 的约数 \(d\),求出其最大的不超过 \(n\) 的约数。

约数的约数,级别还是挺大的,对于 \(10^{18}\) 的数,可能达到了 \(10^8\) 级别,不能暴力枚举,\(10^{18}\) 内的最大约数个数约为 \(10^5\) 个。

考虑一个约数的最大的不超过 \(n\) 的约数,它显然也是 \(m\) 的一个约数,考虑以一种类似动态规划的方式递推,枚举一个约数的所有质因数,从它们各自的最大约数转移过来,显然这是对的。

F