JZOJ 3885. 【长郡NOIP2014模拟10.22】搞笑的代码
来源:互联网 发布:淘宝客服节假日放假吗 编辑:程序博客网 时间:2024/06/02 18:23
Description
在OI界存在着一位传奇选手——QQ,他总是以风格迥异的搞笑代码受世人围观
某次某道题目的输入是一个排列,他使用了以下伪代码来生成数据
while 序列长度< n do
{
随机生成一个整数属亍[1,n]
如果这个数没有出现过则加入序列尾
}
聪明的同学一定发现了,这样生成数据是徆慢的,那么请你告诉QQ,生成一个n排列的期望随机次数
Input
一个正整数n,表示需要生成一个n排列
Output
一个数表示期望随机次数,保留整数
Sample Input
4
Sample Output
8(.333333…)
【友情提示】
输出样例的括号里表示答案的小数部分,但实际丌要求输出
数学期望=sigma(概率* 权值),本题中为期望随机次数=sigma(概率*随机次数)
Data Constraint
30%数据满足
80%数据满足
100%数据满足
Solution
这题是经典的概率期望题。
定义
fi 表示 序列长度为i 时的期望随机次数,不难根据题目的定义列出递推式:fi=in∗(fi+1)+n−in∗(fi−1+1) 解得:
fi=fi−1+nn−i 所以答案就是:
∑i=1nni 但然而数据范围很大,单纯的
O(N) 处理是会超时的。于是两个“高深”的算法便横空出世了!
- 打表!!!——每隔
107 打一个数,暴力处理!~
- 打表!!!——每隔
运用 欧拉常数 与 调和级数 处理,在
N 很大时误差极小;之后在
N≤107 时同样暴力处理即可。具体公式为:
Ans=logeN∗Euler∗N
Code
#include<cstdio>#include<cmath>using namespace std;const double Euler=0.57721566490153286060651209;int n;double ans;int main(){ scanf("%d",&n); if(n>1e7) ans=log(n)+Euler; else for(int i=1;i<=n;i++) ans+=1.0/i; printf("%.0lf",n*ans);}
1 0
- JZOJ 3885. 【长郡NOIP2014模拟10.22】搞笑的代码
- jzoj 3885. 【长郡NOIP2014模拟10.22】搞笑的代码 调和级数
- JZOJ3885. 【长郡NOIP2014模拟10.22】搞笑的代码
- 【长郡NOIP2014模拟10.22】搞笑的代码
- 搞笑的代码【长郡NOIP2014模拟10.22】
- {题解}[jzoj3885]【长郡NOIP2014模拟10.22】搞笑的代码
- 【JZOJ3885】【长郡NOIP2014模拟10.22】搞笑的代码
- 【长郡NOIP2014模拟10.22】搞笑的代码
- JZOJ 3886. 【长郡NOIP2014模拟10.22】道路维护
- JZOJ 3887. 【长郡NOIP2014模拟10.22】字符串查询
- 道路维护【长郡NOIP2014模拟10.22】
- 【长郡NOIP2014模拟10.22】道路维护
- 【长郡NOIP2014模拟10.22】字符串查询
- JZOJ 3899. 【NOIP2014模拟】逻辑的连通性
- 【JZOJ 3885】 搞笑的代码
- jzoj 3885 搞笑的代码
- JZOJ NOIP2014模拟 8.12
- JZOJ NOIP2014模拟 8.13
- c语言学习日志 day3
- 如何使用Android Studio开发/调试Android源码
- RRDTool使用方法简介--Ganglia数据库
- 【AI每日播报】PyTorch开源
- 【NOJ2024】入栈序列和出栈序列
- JZOJ 3885. 【长郡NOIP2014模拟10.22】搞笑的代码
- 01_语言与硬件(寄存器、存储器、汇编语言)
- 放下金箍,如何救你;戴上金箍,如何爱你。
- C语言复习手记
- 【JZOJ 3886】 道路维护
- 开发工具的使用1
- 不带缓存的文件I/O操作
- A对象GameObject是否面向B对象的判断
- 关于SQL视图的创建和使用方法