题目大意:有n道题,第i道题有ai个选项。一个人把所有的正确答案填到了后面一题上(特殊的,当i=n的时候填到1上),问他期望做对几道题
题解:因为题目相互独立,求出每题做对期望求和即可
首先处理环形,另a[n+1]=a[1]即可
对于第i+1题,选择有a[i]种,正确答案有a[i+1]种
形式化的描述一下,这一题做对的概率就是在两个集合
A={1,2,…,a},B={1,2,…,b},中选两个数相同的概率
显然,这个概率p=min(a,b)a∗b=1max(a,b)
因为期望加权为1,所以期望就是概率了
我的收获:强啊
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define M 10001000
using namespace std;
int n,A,B,C,a[M];
void work()
{
double ans=0;
for(int i=1;i<=n;i++) ans+=1.0/max(a[i],a[i+1]);
printf("%.3lf\n",ans);
}
void init()
{
cin>>n>>A>>B>>C>>a[1];
for(int i=2;i<=n;i++) a[i]=((long long)a[i-1]*A+B)%100000001;
for(int i=1;i<=n;i++) a[i]=a[i]%C+1;
a[n+1]=a[1];
}
int main()
{
init();
work();
return 0;
}