P1297 [国家集训队]单选错位

一道水题(鬼知道为什么入门级的题会划到绿题里)
不过还算有点意思,所以就诞生了这篇题解。
有意思的点是分子中的min被约分后变成了分母中的max,这一点真的很有意思。

题目算法要素:数论&期望问题

题面:洛谷的传送门

题目分析:

依次考虑每一道题的期望得分。
对于题目i,它的期望得分与a[i]和a[i-1]相关。i与i-1的答案相同时,第i题会被答对。
i与i-1的答案可能情况总数共有a[i]a[i-1]种,而其中两题答案相同的情况有min(a[i],a[i-1])种。
因此期望得分score=min(a[i],a[i-1])/a[i]
a[i-1]=1.0/max(a[i],a[i-1])。
一遍循环 O(n)求和统计答案即可。

#include<bits/stdc++.h>
using namespace std;
int n,A,B,C,a[10000006];
double ans;
void init()
{
	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;	
}
void work()
{
	ans+=1.0/(double)max(a[1],a[n]);
	for(int i=2;i<=n;++i)
	{
		ans+=1.0/(double)max(a[i],a[i-1]); 
	}	
}	
int main()
{
	scanf("%d%d%d%d%d",&n,&A,&B,&C,&a[1]);
	init();
	work();
	printf("%.3lf",ans);
	return 0;	
}
posted @ 2021-09-16 10:52  Mint-hexagram  阅读(22)  评论(0编辑  收藏  举报