Logo HelloWorld信息学奥赛题库

少儿编程

时间限制:2 s 空间限制:512 MB

#4292. 生成随机数

Statistics

题目描述

「诶,我想生成一个随机数,等概率是 $1$ 或 $2$。」

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

「那如果我想让它等概率是 $1$ 或 $2$ 或 $3$ 呢?」

「嗯,我想想。这样吧,你先扔两次,如果依次是反反就生成 $1$,反正就生成 $2$,正反就生成 $3$,正正就重新来吧。」

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

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

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

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

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

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

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

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

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

输入格式

第一行,一个正整数 $n$。

第二行,$n$ 个空格隔开的正整数,其中第 $i$ 个数是 $a_i$。

输出格式

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

我们保证存在非负整数 $R$,使得 $P$ 和 $R\times Q$ 对 $998244353$ 取余的结果相等,设 $S$ 是最小的 $R$。

仅一行,一个非负整数 $S$。

样例 1

input

2
1 1

output

1

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

样例 2

input

3
1 1 1

output

665496238

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

样例 3

input

2
1 3

output

499122178

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

样例 4

input

7
1 1 1 1 1 1 1

output

570425348

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

样例 5

input

3
2 3 3

output

748683267

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

样例 6

input

3
1 3 5

output

887328316

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

样例 7

input

3
3 3 4

output

798595485

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

数据范围与提示

测试点编号 规模限制 特殊限制
$1$ $n=2$ A
$2,3$ $n=2$ B
$4$ $n=2$
$5$ $n=m$ A
$6,7$ $n=m$ B
$8$ $n=m$
$9$ $m\le 10^3$ A
$10,11$ $m\le 10^3$ B
$12$ $m\le 10^3$
$13$ $m\le 10^5$ A
$14,15$ $m\le 10^5$ B
$16$ $m\le 10^5$
$17$ A
$18,19$ B
$20$

对于所有数据,$n\leq 10^6$,$m\leq 10^7$。其中 $m$ 表示所有 $a_i$ 的和,A 表示 $m$ 是 $2$ 的幂次,B 表示 $m$ 是奇数。