ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2022-06-16 21:03:18  阅读:181  来源: 互联网

标签:frac int ll P1297 long 单选 maxn 错位 国家集训队


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

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

思路

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

\[\notag p_i=\frac{\min(a_i,a_{i-1})}{a_i\times a_{i-1}} \]

解释:由于抄错位了,所以选中的情况一共有\(\min(a_i,a_{i-1})\)。而\(a_i,a_{i-1}\)的组合情况一共有\(a_i\times a_{i-1}\)种,故概率如上。

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

\[\notag 当 ~ a_i<=a_{i-1} ~ 时\\ p_i=\frac{1}{a_{i-1}}\\ 当 ~ a_i>a_{i-1} ~ 时\\ p_i=\frac{1}{a_i}\\ 综上:p_i=\frac{1}{\max(a_i,a_{i-1})} \]

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(); 
}

标签:frac,int,ll,P1297,long,单选,maxn,错位,国家集训队
来源: https://www.cnblogs.com/LQX-OI/p/16383532.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有