#P14163. [ICPC 2022 Nanjing R] 堆里的 NaN
[ICPC 2022 Nanjing R] 堆里的 NaN
题目描述
(Not a Number) 是 1985 年 IEEE 754 浮点数标准里引入的特殊浮点数。标准规定,当 与一个浮点数 进行比较时( 可以是正数,零,负数,甚至是 本身),应当返回以下结果。
$$\begin{array}{|c|c|c|c|c|c|c|} \hline \textbf{比较} & \texttt{NaN} \ge \texttt{x} & \texttt{NaN} \le \texttt{x} & \texttt{NaN} > \texttt{x} & \texttt{NaN} < \texttt{x} & \texttt{NaN} = \texttt{x} & \texttt{NaN} \ne \texttt{x} \\ \hline \textbf{结果} & False & False & False & False & False & True \\ \hline \end{array} $$堆是一种数据结构,可以用具有特殊性质的序列表示。以下算法展示了如何将 个浮点数 按顺序加入小根堆 中,其中 是一个初始为空的序列。
以下算法中,用 表示 的第 个元素,用 表示满足 的最大整数 。
:::align{center}
:::
给定一个整数 ,考察这 个元素的排列:从 到 的所有整数(含两端),再加上一个额外的元素 。称这 个元素的一个排列 是“堆序列”,若存在这 个元素的一个排列 满足 。
现在从这 个元素的所有排列中等概率随机选取一个(也就是说,一个特定的排列被选中的概率是 ),求被选中的排列是堆序列的概率。
输入格式
有多组测试数据。第一行输入一个整数 ()表示测试数据组数,对于每组测试数据:
第一行输入一个整数 ()。
输出格式
每组数据输出一行表示答案。
可以证明答案是一个有理数 。为了避免精度问题,请输出整数 作为答案,其中 , 是满足 的整数。
5
1
3
7
10
20221218
1
666666672
55555556
596445110
3197361
提示
对于第二组样例数据,有 个堆序列。
- $\{\texttt{NaN}, 1, 2\} = \text{\texttt{HEAPIFY}}(\{\texttt{NaN}, 1, 2\})$。
- $\{\texttt{NaN}, 2, 1\} = \text{\texttt{HEAPIFY}}(\{\texttt{NaN}, 2, 1\})$。
- $\{1, \texttt{NaN}, 2\} = \text{\texttt{HEAPIFY}}(\{1, \texttt{NaN}, 2\}) = \text{\texttt{HEAPIFY}}(\{2, \texttt{NaN}, 1\})$。
- $\{1, 2, \texttt{NaN}\} = \text{\texttt{HEAPIFY}}(\{1, 2, \texttt{NaN}\}) = \text{\texttt{HEAPIFY}}(\{2, 1, \texttt{NaN}\})$。
所以答案用有理数表示是 。因为 ,我们应该输出 。