单选错位

【问题描述】

gx和lc去参加noip初赛,其中有一种题型叫单项选择题,顾名思义,只有一个选项是正确答案。试卷上共有n道单选题,第i道单选题有ai个选项,这ai个选项编号是1,2,3,…,ai,每个选项成为正确答案的概率都是相等的。lc采取的策略是每道题目随机写上1-ai的某个数作为答案选项,他用不了多少时间就能期望做对道题目。gx则是认认真真地做完了这n道题目,可是等他做完的时候时间也所剩无几了,于是他匆忙地把答案抄到答题纸上,没想到抄错位了:第i道题目的答案抄到了答题纸上的第i+1道题目的位置上,特别地,第n道题目的答案抄到了第1道题目的位置上。现在gx已经走出考场没法改了,不过他还是想知道自己期望能做对几道题目,这样他就知道会不会被lc鄙视了。

我们假设gx没有做错任何题目,只是答案抄错位置了。

【输入格式】

n很大,为了避免读入耗时太多,输入文件只有5个整数参数n, A, B, C, a1,由上交的程序产生数列a。下面给出pascal/C/C++的读入语句和产生序列的语句(默认从标准输入读入):

// for pascal 
readln(n,A,B,C,q[1]); 
for i:=2 to n do q[i] := (int64(q[i-1]) * A + B) mod 100000001; 
for i:=1 to n do q[i] := q[i] mod C + 1; 
 
// for C/C++ 
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; 

选手可以通过以上的程序语句得到n和数列aa的元素类型是32位整数),na的含义见题目描述。

【输出格式】

输出一个实数,表示gx期望做对的题目个数,保留三位小数。

【样例输入】

3 2 0 4 1

【样例输出】

1.167

【样例说明】

a[] = {2,3,1}

正确答案

gx的答案

做对题目

出现概率

{1,1,1}

{1,1,1}

3

1/6

{1,2,1}

{1,1,2}

1

1/6

{1,3,1}

{1,1,3}

1

1/6

{2,1,1}

{1,2,1}

1

1/6

{2,2,1}

{1,2,2}

1

1/6

{2,3,1}

{1,2,3}

0

1/6

共有6种情况,每种情况出现的概率是1/6,gx期望做对(3+1+1+1+1+0)/6 = 7/6题。(相比之下,lc随机就能期望做对11/6题)

【数据范围】

对于30%的数据 n≤10, C≤10

对于80%的数据 n≤10000, C≤10

对于90%的数据 n≤500000, C≤100000000

对于100%的数据 2≤n≤10000000, 0≤A,B,C,a1≤100000000

洛谷链接

BZOJ链接

所求即为连续两题答案相同的个数期望

考虑每题对答案的贡献

总共不同答案个数为 ∏ai ,第 i 题答案正确的方案数为∏ai / ( ai - 1 * ai ) * min(ai, ai - 1)

因此第 i 题对答案贡献为 1 / max(ai, ai - 1)

ans = ∑ 1 / max(ai, ai - 1)

 #include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring> using namespace std; template <typename tn> void read (tn & a) {
tn x = , f = ;
char c = getchar();
while (c < '' || c > ''){ if (c == '-') f = -; c = getchar(); }
while (c >= '' && c <= ''){ x = x * + c - ''; c = getchar(); }
a = f == ? x : -x;
} const long long MAXN = ;
long long n, A, B, C;
long long a[MAXN];
double ans; int main() {
read(n);
read(A);
read(B);
read(C);
read(a[]);
ans = ;
for (int i = ; i <= n; ++i) {
a[i] = ((long long)a[i - ] * A + B) % ;
}
for (int i = ; i <= n; ++i) {
a[i] = a[i] % C + ;
}
a[] = a[n];
for (int i = ; i <= n; ++i) {
ans += (double) / (double)(max(a[i], a[i - ]));
}
printf("%.3f\n", ans);
return ;
}

BZOJ2134 luoguP1297 [国家集训队]单选错位的更多相关文章

  1. P1297 [国家集训队]单选错位(期望)

    P1297 [国家集训队]单选错位 期望入门 我们考虑涂到第$i$道题时的情况 此时题$i$答案有$a[i]$种,我们可能涂$a[i+1]$种 分类讨论: 1.$a[i]>=a[i+1]$: 可 ...

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

    P1297 [国家集训队]单选错位 题目背景 原 <网线切割>请前往P1577 题目描述 gx和lc去参加noip初赛,其中有一种题型叫单项选择题,顾名思义,只有一个选项是正确答案.试卷上 ...

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

    题目背景 原 <网线切割>请前往P1577 题目描述 gx和lc去参加noip初赛,其中有一种题型叫单项选择题,顾名思义,只有一个选项是正确答案.试卷上共有n道单选题,第i道单选题有ai个 ...

  4. BZOJ.2134.[国家集训队]单选错位(概率 递推)

    题目链接 如题目中的公式,我们只要把做对每个题的概率加起来就可以了(乘个1就是期望). 做对第i道题的概率 \[P_i=\frac{1}{max(a_{i-1},a_i)}\] 原式是 \(P_i=\ ...

  5. 洛谷P1297 [国家集训队]单选错位_数学期望

    考虑第 iii 位, 那么当前共有 a[i]a[i]a[i] 种选项,那么当前选项正确的情况就是下一个被误填的答案与当前答案相同.换句话说,当前答案一共有 a[i]a[i]a[i] 种可能,而下一个答 ...

  6. Luogu P1297 [国家集训队]单选错位 | 概率与期望

    题目链接 题解: 单独考虑每一道题目对答案的贡献. 设$g_i$表示gx在第$i$道题目的答案是否正确(1表示正确,0表示不正确),则$P(g_i=1)$表示gx在第$i$道题目的答案正确的概率. 我 ...

  7. COGS1882 [国家集训队2011]单选错位

    ★   输入文件:nt2011_exp.in   输出文件:nt2011_exp.out   简单对比时间限制:1 s   内存限制:512 MB [试题来源] 2011中国国家集训队命题答辩 [问题 ...

  8. Bzoj 2134: [国家集训队2011]单选错位(期望)

    2134: 单选错位 Time Limit: 10 Sec Memory Limit: 259 MB Description Input n很大,为了避免读入耗时太多,输入文件只有5个整数参数n, A ...

  9. bzoj2134单选错位

    bzoj2134单选错位 题意: 试卷上n道选择题,每道分别有ai个选项.某人全做对了,但第i道题的答案写在了第i+1道题的位置,第n道题答案写在第1题的位置.求期望能对几道.n≤10000000 题 ...

随机推荐

  1. SQL优化之count(*),count(列)

    一.count各种用法的区别 1.count函数是日常工作中最常用的函数之一,用来统计表中数据的总数,常用的有count(*),count(1),count(列).count(*)和count(1)是 ...

  2. piwik custom variables

    piwik custom variables  是一个功能非常强大的自定义变量跟踪方案,多用于基于访客或是页面级别的变量跟踪.piwik默认最多可以添加5个自定义变量. 使用方式是在客户端脚本里添加如 ...

  3. php exec返回状态为1

    之前在用到php exec 时 总是保存,返回状态1,那这时怎么排查呢 exec('ls 2>&1', $output, $return_val); print_r($output); ...

  4. linux新手非常有用的20个命令

    引用:http://www.oschina.net/translate/useful-linux-commands-for-newbies 1. ls命令 ls命令是列出目录内容(List Direc ...

  5. xe5 android 控制蓝牙[转]

    用以下代码中的接口实现控制蓝牙的开.关及详细信息 unit Androidapi.JNI.BluetoothAdapter; // (c) RedTitan Technology 2013// JNI ...

  6. Windows Phone 常用资源

    统计分析: 1. 友盟 http://www.umeng.com SDK: http://www.nuget.org/packages/UmengAnalytics/ 集成文档: http://dev ...

  7. 关闭AutoCAD 2019快速访问工具栏的web和moblie保存文件功能

    解决方法如下:1.先关闭CAD,再打开注册表编辑器:开始--运行--输入 regedit2.定位到 [HKEY_LOCAL_MACHINE\SOFTWARE\Autodesk\AutoCAD\R23. ...

  8. adb调试android设备 说的比较清楚的一篇文章

    ADB支持两种连接Android系统的方式,USB方式及网络方式.一般手机及平板默认会设置为USB方式.android系统底层运行着一个服务(adbd),用于相应和管理大家在电脑端的adb命令连接,这 ...

  9. 【sql】之case when then else end

    select a.`name`, sum(( END)) '语文', sum(( END)) '数学', sum(( END))'英语' from t_score a GROUP BY a.`name ...

  10. MyBatis 接口的使用

    为了简化MyBatis的使用MyBatis的使用,MyBatis提供了接口方式自动化生成调用过程,可以大大简化MyBatis的开发 开发映射文件: <select id="queryO ...