loj#P3160. 「NOI2019」斗主地

「NOI2019」斗主地

题目描述

小 S 在和小 F 玩一个叫「斗地主」的游戏。

可怜的小 S 发现自己打牌并打不过小 F,所以他想要在洗牌环节动动手脚。

一副牌一共有 nn 张牌,从上到下依次标号为 1n1 \sim n。标号为 ii 的牌分数f(i)f (i)。在本题,f(i)f (i) 有且仅有两种可能:f(i)=if (i) = if(i)=i2f (i) = i^2

洗牌的方式和我们日常生活中的比较类似,以下我们用形式化的语言来定义:

洗牌环节一共分 mm 轮,这 mm 轮洗牌依次进行。第 ii 轮洗牌时:

  1. 小 S 会拿出从最上面往下数的前 AiA_i 张牌。这样这副牌就被分成了两堆:第一堆是最上面的 AiA_i 张牌,第二堆是剩下的 nAin − A_i 张牌,且这两堆牌内相对顺序不变。特别地,当 Ai=nA_i = nAi=0A_i = 0 时,有一堆牌是空的。
  2. 接下来对两堆牌进行合并,从而产生新的第三堆牌。当第一堆牌还剩下 XX 张,第二堆牌还剩下 YY 张的时候,以 XX+Y\frac{X}{X+Y} 的概率取出第一堆牌的最下面的牌,并将它放入新的第三堆牌的最上面,YX+Y\frac{Y}{X+Y} 的概率取出第二堆牌的最下面的牌,并将它放入新的第三堆牌的最上面。
  3. 重复操作 2,一直取到两堆牌都为空为止。这样我们就完成了一轮洗牌。

因为洗牌过程是随机的,所以小 S 发现自己没法知道某个位置上具体是哪张牌。但小 S 想问你在经历了这 mm 轮洗牌后,某个位置上的牌的期望分数是多少。小 S 一共会问你 QQ 个这样的问题。

输入格式

从文件 landlords.in 中读入数据。

输入的第一行包含三个正整数 n,m,typen, m, \text{type},分别表示牌的数量,洗牌的轮数与 f(i)f (i) 的类型。当 type=1\text{type} = 1 时,f(i)=if (i) = i。当 type=2\text{type} = 2 时,f(i)=i2f (i) = i^2

接下来一行,一共 mm 个整数,表示 A1AmA_1 \sim A_m

接下来一行一个正整数 QQ,表示小 S 的询问个数。

接下来 QQ 行,每行一个正整数 cic_i,表示小 S 想要知道从上往下第 cic_i 个位置上的牌的期望分数。保证 1cin1 \le c_i \le n

输出格式

输出到文件 landlords.out 中。

输出一共 QQ 行,每行一个整数,表示答案在模 998244353998244353 意义下的取值。

即设答案化为最简分式后的形式为 ab\frac{a}{b},其中 aabb 互质。输出整数 xx 使得 bxa (mod 998244353)bx \equiv a\ (\text{mod}\ 998244353)0x<9982443530 \le x < 998244353。可以证明这样的整数 xx 是唯一的。

4 1 1
3
1
1
249561090

数据范围与提示

对于所有的测试点:$3 \le n \le 10^7 , 1 \le m, Q \le 5 \times 10^5 , 0 \le A_i \le n , \text{type} \in \{1, 2\}$。

每个测试点的具体限制见下表:

测试点编号 nn mm type=\text{type}= 其他性质
11 10\le 10 1\le 1 11
22 80\le 80 80\le 80
33 80\le 80 80\le 80 22
44 100\le 100 5×1055\times 10^5 所有 AiA_i 均相同
55 10710^7 11
66
77
88 22
99
1010

请注意我们并没有保证 QnQ \le n

这里我们给出离散型随机变量 XX 的期望 E[x]\mathbb{E}[x] 的定义:

设离散随机变量 XX 的可能值是 X1,X2,,XkX_1, X_2, \ldots , X_k,$\text{Pr}[X_1], \text{Pr}[X_2], \ldots , \text{Pr}[X_k]$ 为 XX 取对应值的概率。则 XX 的期望为

E[x]=i=1kXiPr[Xi]\mathbb{E}[x]=\sum_{i=1}^k X_i\text{Pr}[X_i]