#P51728. 「LOJ」 生成随机数

「LOJ」 生成随机数

题目描述

「诶,我想生成一个随机数,等概率是 1122。」

「呐,我给你一枚均匀的硬币,你扔一次就好啦。」

「那如果我想让它等概率是 112233 呢?」

「嗯,我想想。这样吧,你先扔两次,如果依次是反反就生成 11,反正就生成 22,正反就生成 33,正正就重新来吧。」

「诶,这个方案是不是有可能永远不能结束啊?」

「是的呢,但是期望 83\frac{8}{3} 次就可以结束了,而且这是期望次数最小的方案。」

「好厉害呀。那如果我还是想让它是 1122,但是概率比是 1122 呢?」

「还是可以用刚才的方案,如果生成了 33 就当成 22 好了。」

「啊,那在这里还是期望次数最小的方案吗?」

「应该不是了吧,毕竟浪费了一些信息。」

「那么应该是什么方案呢?」

「似乎有点复杂了呢,让我想一想。」

从前有一个随机数生成器,能够生成一个 [1,n][1,n] 内的整数,且生成 ii 的权重是 aia_i(即生成 1n1\ldots n 的概率比是 a1:a2::ana_1:a_2:\ldots :a_n)。现在它已经找不到了,而你想模拟这个生成的过程,但是你手里只有一枚均匀的硬币。你想了很久,设计了一个方案并开始扔硬币。可是你扔了很多很多次硬币,却发现你还是没有模拟成功——或许这个方案实在太慢了,甚至有可能永远不会结束。于是你希望找到一个期望扔硬币次数最少的模拟方案,但是这个方案讲起来可能比较复杂,你想先知道这个最少的期望扔硬币次数。

输入格式

第一行,一个正整数 nn

第二行,nn 个空格隔开的正整数,其中第 ii 个数是 aia_i

输出格式

我们保证这个答案是一个正有理数,设其等于 PQ\frac{P}{Q},且 PPQQ 是互质的正整数。

我们保证存在非负整数 RR,使得 PPR×QR\times Q998244353998244353 取余的结果相等,设 SS 是最小的 RR

仅一行,一个非负整数 SS

样例 1

2
1 1
1

P=1,Q=1P=1,Q=1,方案见题目背景。

3
1 1 1
665496238

P=8,Q=3P=8,Q=3,方案见题目背景。

2
1 3
499122178

P=3,Q=2P=3,Q=2,方案是如果第一次正面则直接生成 22,否则根据第二次来生成 1122

7
1 1 1 1 1 1 1
570425348

P=24,Q=7P=24,Q=7,方案略。

3
2 3 3
748683267

P=9,Q=4P=9,Q=4,方案略。

3
1 3 5
887328316

P=20,Q=9P=20,Q=9,方案略。

3
3 3 4
798595485

P=13,Q=5P=13,Q=5,方案略。

数据范围与提示

测试点编号 规模限制 特殊限制
11 n=2n=2 A
2,32,3 B
44
55 n=mn=m A
6,76,7 B
88
99 m103m\le 10^3 A
10,1110,11 B
1212
1313 m105m\le 10^5 A
14,1514,15 B
1616
1717 A
18,1918,19 B
2020

对于所有数据,n106n\leq 10^6m107m\leq 10^7。其中 mm 表示所有 aia_i 的和,A 表示 mm22 的幂次,B 表示 mm 是奇数。