Luogu P1297 [国家集训队]单选错位
P1297 [国家集训队]单选错位
题目背景
原 《网线切割》请前往P1577
题目描述
gx和lc去参加noip初赛,其中有一种题型叫单项选择题,顾名思义,只有一个选项是正确答案。试卷上共有n道单选题,第i道单选题有ai个选项,这ai个选项编号是1,2,3,…,ai,每个选项成为正确答案的概率都是相等的。lc采取的策略是每道题目随机写上1-ai的某个数作为答案选项,他用不了多少时间就能期望做对 \sum_{i=1}^n \frac{1}{a_i}∑i=1nai1 道题目。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和数列a(a的元素类型是32位整数),n和a的含义见题目描述。
输出格式:
输出一个实数,表示gx期望做对的题目个数,保留三位小数。
输入输出样例
3 2 0 4 1
1.167
说明
【样例说明】
正确答案 | 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 a[] = {2,3,1}
共有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
吐槽一下题目背景,你都把重题删掉了,还莫名其妙的把这句话留在这,要怎样啊,关键是名字还这么像
==================================================
显然在顺序改变后,作对第i道题目的充要条件就是第i道题目的选项和第i+1道题目的选项相同
现将n和1这个特殊情况忽略
更加显然就得到了下面一个式子
$$
Ans=\sum_{i=2}^{n} \frac{\min {(a_{i-1},a_i)}}{a_{i-1}\times a_i}
$$
下面解释一下这个式子
两个选项相同的概率就是$\frac{\min {(a_{i-1},a_i)}}{a_{i-1}\times a_i}$这一部分,取min是因为两个位置上的选项相同的情况只包含他们的交集
然后分母就是所有的选项的组合
到最后把选对每一个选项的概率相加
当然不要忘记特殊处理n和1哦
代码
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm> const int maxn = 1e7+3; using namespace std; int n, A, B, C, a[maxn]; 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(int i=2; i<=n; i++) {
double x = a[i-1], y = a[i];
ans += min(x, y)/(x*y);
}
double xx = a[n], yy = a[1];
ans += min(xx, yy)/(xx*yy);
printf("%.3lf", ans);
return 0;
}
Luogu P1297 [国家集训队]单选错位的更多相关文章
- Luogu P1297 [国家集训队]单选错位 | 概率与期望
题目链接 题解: 单独考虑每一道题目对答案的贡献. 设$g_i$表示gx在第$i$道题目的答案是否正确(1表示正确,0表示不正确),则$P(g_i=1)$表示gx在第$i$道题目的答案正确的概率. 我 ...
- P1297 [国家集训队]单选错位(期望)
P1297 [国家集训队]单选错位 期望入门 我们考虑涂到第$i$道题时的情况 此时题$i$答案有$a[i]$种,我们可能涂$a[i+1]$种 分类讨论: 1.$a[i]>=a[i+1]$: 可 ...
- P1297 [国家集训队]单选错位
题目背景 原 <网线切割>请前往P1577 题目描述 gx和lc去参加noip初赛,其中有一种题型叫单项选择题,顾名思义,只有一个选项是正确答案.试卷上共有n道单选题,第i道单选题有ai个 ...
- 洛谷P1297 [国家集训队]单选错位_数学期望
考虑第 iii 位, 那么当前共有 a[i]a[i]a[i] 种选项,那么当前选项正确的情况就是下一个被误填的答案与当前答案相同.换句话说,当前答案一共有 a[i]a[i]a[i] 种可能,而下一个答 ...
- BZOJ2134 luoguP1297 [国家集训队]单选错位
单选错位 [问题描述] gx和lc去参加noip初赛,其中有一种题型叫单项选择题,顾名思义,只有一个选项是正确答案.试卷上共有n道单选题,第i道单选题有ai个选项,这ai个选项编号是1,2,3,…,a ...
- BZOJ.2134.[国家集训队]单选错位(概率 递推)
题目链接 如题目中的公式,我们只要把做对每个题的概率加起来就可以了(乘个1就是期望). 做对第i道题的概率 \[P_i=\frac{1}{max(a_{i-1},a_i)}\] 原式是 \(P_i=\ ...
- luogu P2757 [国家集训队]等差子序列
题目链接 luogu P2757 [国家集训队]等差子序列 题解 线段树好题 我选择暴力 代码 // luogu-judger-enable-o2 #include<cstdio> inl ...
- luogu P2619 [国家集训队2]Tree I
题目链接 luogu P2619 [国家集训队2]Tree I 题解 普通思路就不说了二分增量,生成树check 说一下坑点 二分时,若黑白边权有相同,因为权值相同优先选白边,若在最有增量时出现黑白等 ...
- [Luogu P1829] [国家集训队]Crash的数字表格 / JZPTAB (莫比乌斯反演)
题面 传送门:洛咕 Solution 调到自闭,我好菜啊 为了方便讨论,以下式子\(m>=n\) 为了方便书写,以下式子中的除号均为向下取整 我们来颓柿子吧qwq 显然,题目让我们求: \(\l ...
随机推荐
- SQL Server 运行计划操作符具体解释(1)——断言(Assert)
前言: 非常多非常多地方对于语句的优化,一般比較靠谱的回复即使--把运行计划发出来看看.当然那些仅仅看语句就说怎样怎样改代码,我一直都是拒绝的,由于这样的算是纯蒙.依据本人经验,大量的性能问题单纯从语 ...
- YTU 2630: E2 驾驭const
2630: E2 驾驭const 时间限制: 1 Sec 内存限制: 128 MB 提交: 673 解决: 491 题目描述 引入了const关键词,用于指定"常"对象及&qu ...
- leetcode 784. Letter Case Permutation——所有BFS和DFS的题目本质上都可以抽象为tree,这样方便你写代码
Given a string S, we can transform every letter individually to be lowercase or uppercase to create ...
- VIDIOC_S_INPUT 作用 (转载)
转载:http://blog.csdn.net/kickxxx/article/details/7088658 G_INPUT和S_INPUT用来查询和选则当前的input 一个video设备节点可能 ...
- Rails5入门
更新: 2017/05/29 更新: 2017/09/07 补充对ruby自身的扩张的放置位置 配置文件位置 /config/routes.rb 最简单的定义方法 get ('hello/in ...
- bzoj 1571: [Usaco2009 Open]滑雪课Ski【dp】
参考:https://blog.csdn.net/cgh_andy/article/details/52506738 没有get到什么重点的dp--做的莫名其妙 注意滑雪一个坡可以滑很多次 设f[i] ...
- SQL 设置登录名和密码
1.打开SQL Server Manager管理器,在左面找到 ‘安全性’ 单击右键 选择‘新建”->“登录”, 如下图 2.弹出对话框,在登录名中输入你的登录号,选择'SQLSERVER身份验 ...
- [51nod]1678 lyk与gcd(莫比乌斯反演)
题面 传送门 题解 和这题差不多 //minamoto #include<bits/stdc++.h> #define R register #define pb push_back #d ...
- C++函数重载的4种错误示例
函数重载的4种错误示例: #include <iostream> #include <string> using namespace std; //函数重载 同函数名,函数重载 ...
- [BZOJ1331]魔板
Description 在成功地发明了魔方之后,鲁比克先生发明了它的二维版本,称作魔板.这是一张有8个大小相同的格子的魔板: 1 2 3 4 8 7 6 5 我们知道魔板的每一个方格都有一种颜色.这8 ...