「国家集训队」单选错位 题解
本文网址:https://www.cnblogs.com/zsc985246/p/16366596.html ,转载请注明出处。
题目大意
试卷上共有 道单选题,第 道题有 个选项,每个选项成为正确答案的概率都是相等的。
全部做对,但抄错位了:每题都向后抄了一个位置,特别地,第 道题目抄到了第 道题目的位置。
想知道自己期望能做对几道题目。
思路
数据范围 ,说明需要 的算法解决。
通过样例仔细观察后,我们可以发现,第 题是否正确,只与第 题的答案是否跟第 题相同有关。
举个例子:
对于第 题和第 题,正确答案的总情况数为 ,而两道题答案相同的只有 种。最终做对的概率为 。
为什么要求最小值?
因为当第二题答案为 3 时,第一题答案不可能与它相同。所以相同情况数取决于它们的最小值。
由上可得:两道题的正确答案情况总数为 ,两道题答案相等的情况有 种,所以答案需要加上一个 。
化简一下:
注意,这里的 变成了 。
当 时,原式变为 ;
当 时,原式变为 。
综合一下,就是 。
对于特殊情况只需要再加上 即可。
最终公式为:
因此,代码出。
代码实现
#include<bits/stdc++.h>
#define ll int
const ll N=10000010;//1e7+10
using namespace std;
ll n,A,B,C,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;
for(ll i=2;i<=n;i++){//是2~n
ans+=1.0/max(a[i],a[i-1]);//公式
}
ans+=1.0/max(a[n],a[1]);//特殊处理
printf("%.3lf",ans);//输出
return 0;
}
尾声
如果你发现了问题,你可以直接回复这篇题解
如果你有更好的想法,也可以直接回复!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现