#265. 涂错了卡

涂错了卡

题目描述

小 A 和小 B 正在参加考试。

考试共 n 道题目,全部为单选题,即每道题目给出若干个选项,但只有一个选项是正确的。不同的题目,给出的选项个数可能不一样。第 i 道题目给出了 sis_i 个选项。

小 A 做题完全靠蒙。他连题都不看,直接在答题卡上随机涂答案。很快,他就做完了所有的题目。显然,他期望做对的题目数量是 i=1n1si\sum_{i=1}^n \frac{1}{s_i}

小 B 做题则完全靠实力。他每道题都非常认真去做,而且全部做对了。不过他全部做完的时候马上就要交卷了,于是他慌忙把答案涂到了答题卡上。不幸的是,由于太过慌忙,他把答案涂错了行,第 i 题的答案被涂到了第 i+1 题的选项上。特别地,第 n 道题的答案涂到了第 1 题的选项上。

等到交卷出场后,小 B 才猛然意识到问题,但是已经无法挽回。不过,小 B 仍然想知道,他能期望做对多少道题目?

输入格式

由于 n 比较大,这里采用了动态生成数据的方式。

输入只有一行,包含五个整数 n,a,b,c,dn, a, b, c, d

s1,s2,s3,,sns_1, s_2, s_3, ……, s_n 靠以下 C++ 代码生成:

	const int mod=1e8+1;
	int n,a,b,c,d;
	cin>>n>>a>>b>>c>>d;
	s[1]=d;
	for (int i = 2; i <= n; i++)
		s[i] = (s[i-1] * a + b) % mod;
	for (int i = 1; i <= n; i++)
		s[i] = s[i] % c + 1;

输出格式

一行,一个实数,保留 3 位小数,表示答案

样例1输入

3 2 0 4 1

样例1输出

1.167

样例1说明

正确答案 小 B 的答案 做对题目 出现概率
{1,1,1}\{1, 1,1\} {1,1,1}\{1,1,1\} 33 16\frac16
{1,2,1}\{1,2,1\} {1,1,2} \{1,1,2\} 11
{1,3,1}\{1,3,1\} {1,1,3} \{1,1,3\}
{2,1,1}\{2,1,1\} {1,2,1} \{1,2,1\}
{2,2,1}\{2,2,1\} {1,2,2} \{1,2,2\}
{2,3,1}\{2,3,1\} {1,2,3}\{1,2,3\} 00

s={2,3,1}s = \{2,3,1\}

共有 66 种情况,每种情况出现的概率是 16\frac{1}{6},小 B 期望做对 3+1+1+1+1+06=76\frac{3+1+1+1+1+0}6 = \frac76 题。(相比之下,小 A 随机就能期望做对 116\frac{11}6 题)

样例2输入

1234567 8910 11121314 23333333 98765432

样例2输出

0.115

数据范围

对于 30%30\% 的数据,n10,c10n ≤ 10, c ≤ 10

对于 80%80\% 的数据,n104,c10n ≤ 10^4, c ≤ 10

对于 90%90\% 的数据,n5×105,c108n ≤ 5×10^5, c ≤ 10^8

对于 100%100\% 的数据,2n107,0a,b1082 ≤ n ≤ 10^7, 0 ≤ a,b ≤ 10^81c,d1081 ≤ c, d ≤ 10^8