P13364 [GCJ 2011 Qualification] GoroSort
题目描述
Goro 有 4 只手臂。Goro 非常强壮。你可别惹 Goro。Goro 需要对一个包含 $N$ 个不同整数的数组进行排序。算法不是 Goro 的强项,力量才是 Goro 的强项。Goro 的计划是用两只手的手指按住数组中的若干元素,然后用另外两只手狠狠地敲桌子。这样,未被固定的元素会飞到空中,被随机打乱后再落回原来的空位。
Goro 想要尽快将数组排序。如果 Goro 每次都聪明地选择要固定哪些元素,平均需要敲多少次桌子才能将给定的数组排序?Goro 用来固定数组的两只手有无限多的手指。
更具体地说,在每次敲桌子之前,Goro 可以选择数组中的任意子集元素将其固定在原位。每次可以根据之前敲桌子的结果选择不同的固定方式。每次敲桌子会将未固定的元素等概率地随机排列。每种排列出现的概率相同。
输入格式
输入的第一行为测试用例数 $T$。接下来有 $T$ 组测试数据。每组测试数据包含两行。第一行为整数 $N$。第二行为数组初始顺序下的 $N$ 个元素。
输出格式
对于每个测试用例,输出一行,格式为 "Case #$x$: $y$",其中 $x$ 为测试用例编号(从 1 开始),$y$ 为在采用最佳固定策略时,期望的敲桌子次数。只要答案的绝对误差或相对误差不超过 $10^{-6}$ 即视为正确。
说明/提示
**样例解释**
在第 3 个测试用例中,一种可行的策略是先固定最左边的两个元素。元素 3 和 4 没有被固定。敲桌子后,它们有 $1/2$ 的概率变为正确顺序 $[3, 4]$,有 $1/2$ 的概率变为错误顺序 $[4, 3]$。因此,平均需要 2 次敲桌子才能将它们排好。之后,Goro 可以固定元素 3 和 4,再敲桌子直到 1 和 2 排好,平均也需要 2 次。总共期望敲桌子次数为 $2 + 2 = 4$。
**数据范围**
- $1 \leq T \leq 100$;
- 每组测试数据的第二行为 $N$ 个最小正整数的一个排列。
**小数据范围(10 分,测试点 1 - 可见)**
- $1 \leq N \leq 10$;
- 时间限制:~~30~~ 3 秒。
**大数据范围(20 分,测试点 2 - 隐藏)**
- $1 \leq N \leq 1000$;
- 时间限制:~~60~~ 6 秒。
由 ChatGPT 4.1 翻译