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

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

注:本蒟蒻的第一个期望题(因为看到臭气弹所以来学习一下)

思路

对于每一个1题目,显然有:

pi=min(ai,ai1)ai×ai1

解释:由于抄错位了,所以选中的情况一共有min(ai,ai1)。而ai,ai1的组合情况一共有ai×ai1种,故概率如上。

当然这个公式可以约分(洛谷大佬说的):

 ai<=ai1 pi=1ai1 ai>ai1 pi=1aipi=1max(ai,ai1)

CODE

#include<bits/stdc++.h>
#define ll long long
#define ld long double
using namespace std;
const int maxn = 1e7+32;
int int_maxn=1e9;
ll ll_maxn=1e18;
inline ll read_int(){
    ll a=0,f=0,g=getchar();
    while(g<'0'||g>'9'){if(g=='-') f=1;g=getchar();}
    while('0'<=g&&g<='9') a=a*10+g-'0',g=getchar();
    return f ? -a : a;
}

inline void write(ll s,bool f){
    int top=0,a[40];
    if(s<0) s=-s,putchar('-');
    while(s) a[++top]=s%10,s/=10;
    if(top==0) a[++top]=0;
    while(top) putchar(a[top]+'0'),top--;
    if(f) putchar('\n');
}

int a[maxn];
int n,A,B,C;
ld ans;

inline void begin(){
	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;
}

inline void read(){
	n=read_int(),A=read_int(),B=read_int(),C=read_int(),*(a+1)=read_int();
	begin();
	for(int i=2;i<=n;i++){
		ans+=(ld)1/max(a[i],a[i-1]);
	}
	ans+=(ld)1/max(a[1],a[n]);
	printf("%.3Lf\n",ans);
}

int main (){
	read(); 
}
posted @   轩Demonmaster  阅读(25)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效
点击右上角即可分享
微信分享提示