题目描述
题解
答案就是每一位和前面一位答案相同的概率和(权值为1)
也就是sigma (1/a(i-1)) * (1/a(i)) * min(a(i-1),a(i))
代码
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std;
#define N 10000005
int n,A,B,C;
int a[N];
double ans;
int main()
{
scanf("%d%d%d%d%d",&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[0]=a[n];
for (int i=1;i<=n;++i)
ans+=(1/(double)a[i-1])*(1/(double)a[i])*(double)min(a[i-1],a[i]);
printf("%.3lf\n",ans);
}

本文介绍了一种计算概率的方法,通过求解每位与前位答案相同概率的加总,利用特定公式进行计算。代码使用C++实现,展示了输入处理、循环计算及输出结果的过程。
&spm=1001.2101.3001.5002&articleId=62431808&d=1&t=3&u=e068258a1bb54c41b3de61aba94f067a)
479

被折叠的 条评论
为什么被折叠?



