编程题
### 问题描述 在 VLN 任务中,机器人会根据当前的场景推断下一步的行为。我们将地图简化到一个编号为 $1 \sim n$ 的环上,其中编号为 $n$ 的下一个位置是编号为 $1$ 的位置。当机器人到达环上的第 $i$ 个位置时,机器人会根据其预训练参数的计算结果将会以 $p_i$ 的概率移动向下一个位置,或者以 $1 - p_i$ 的概率停在当前位置。机器人初始从环的 $1$ 号位置出发,你已知机器人通过预训练参数的计算结果(即行动的概率 $p_i$),想知道机器人最终**停在每一个位置的概率**以及**位置之间的概率大小关系**。 为了避免精度造成的问题,机器人的神经网络在输出时对 $2$ 的次幂进行了对齐,即概率 $p_i$ 均可以表示成 $2^{-k}$ 的形式。 如果有不明确之处可以结合样例解释进行理解。 为了方便进行答案检测,请将概率对 $998244353$ 取模后输出。可以被证明答案一定可以被表示成一个分数:$\frac{p}{q}$,其中 $p, q$ 的最大公因数是 $1$。当输出答案对 $M$ 取模的时候,你应该输出满足下列式子的 $x$:$0 \leq x < M, x \times q \equiv p(\bmod M)$。 ### 输入格式 第一行一个整数 $n$,表示环的大小。 接下来一行 $n$ 个整数,$k_1, k_2, ..., k_n$,其中 $p_i = 2^{-k_i}$。 ### 输出格式 两行,两个整数,代表答案。 原本的第一行应该是 $n$ 个整数,第 $i$ 个整数表示机器人停在位置 $i$ 的概率对 $998244353$ 取模的结果,原本的第二行应该是 $n$ 个整数,第 $i$ 个整数表示机器人停在位置 $i$ 的概率(取模之前的值)是所有位置中第几大的,如果两个位置的概率一样大,认为编号小的排在前面(更大)。**为了减少输出量**,我们将要求你仅输出答案数组的哈希值。对一个 $1 \sim n$ 的数组 $a$,其哈希值为 $\sum_{i=1}^{n} {i \times a_i}$ 对 $998244353$ 取模的结果。 ### 样例输入 ```text 2 1 1 ``` ### 样例输出 ```text 332748119 5 ``` ### 说明 原本的输出第一行为 $665496236$ $332748118$,第二行为 $1$ $2$。 机器人首先从 $1$ 号点开始,以 $\frac{1}{2}$ 的概率走到 $2$,以 $\frac{1}{2}$ 的概率停下。如果走到了 $2$ 号点,以 $\frac{1}{2}$ 的概率走到 $1$,以 $\frac{1}{2}$ 的概率停下。因此可以发现停在 $1$ 号点的概率是 $\sum\limits_{n=1}^{+\infin}\frac{1}{2}^{2n-1} = \frac{2}{3}$,停在 $2$ 号点的概率是 $\sum\limits_{n=1}^{+\infin}\frac{1}{2}^{2n} = \frac{1}{3}$,故最终答案为 $665496236$ 和 $332748118$。 ### 评测数据规模 对于 $30$% 的评测数据,$0 < n \leq 10, 0 \leq k_i \leq 5$。 对于 $100$% 的评测数据,$0 < n \leq 2 \times 10^6, 0 \leq k_i \leq 5 \times 10^6$。
查看答案
赣ICP备20007335号-2