E. Little Pony and Expected Maximum(组合期望)
题目描述:
Little Pony and Expected Maximum
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output
Twilight Sparkle was playing Ludo with her friends Rainbow Dash, Apple Jack and Flutter Shy. But she kept losing. Having returned to the castle, Twilight Sparkle became interested in the dice that were used in the game.
The dice has m faces: the first face of the dice contains a dot, the second one contains two dots, and so on, the m-th face contains m dots. Twilight Sparkle is sure that when the dice is tossed, each face appears with probability . Also she knows that each toss is independent from others. Help her to calculate the expected maximum number of dots she could get after tossing the dice n times.
Input
A single line contains two integers m and n (1 ≤ m, n ≤ 105).
Output
Output a single real number corresponding to the expected maximum. The answer will be considered correct if its relative or absolute error doesn't exceed 10 - 4.
Examples
Input
Copy
6 1
Output
Copy
3.500000000000
Input
Copy
6 3
Output
Copy
4.958333333333
Input
Copy
2 2
Output
Copy
1.750000000000
Note
Consider the third test example. If you've made two tosses:
- You can get 1 in the first toss, and 2 in the second. Maximum equals to 2.
- You can get 1 in the first toss, and 1 in the second. Maximum equals to 1.
- You can get 2 in the first toss, and 1 in the second. Maximum equals to 2.
- You can get 2 in the first toss, and 2 in the second. Maximum equals to 2.
The probability of each outcome is 0.25, that is expectation equals to:
You can read about expectation using the following link: http://en.wikipedia.org/wiki/Expected_value
思路:
刚开始沙雕了。把题目中的几次投掷的最大值看成了总和,也就是投掷几次的得到的总面值,开始枚举排列,找规律,就在感觉有点眉目时,发现不对,题目好像不是这个,(⊙o⊙)…
题目的意思是投掷一枚m面的色子n次,每次投掷的面值有个最大值,求所有可能的投掷的最大期望。
开始的思路:
最大为一,一种情况,
最大为2,可以选择,有一次投了2,剩下投了少于2,两次投了2,剩下少于2,...,n次全投2
最大为3,等等等等
最后公式是:\(\sum_{i=1}^{m}\sum_{j=1}^{n}i*C_n^j(i-1)^{n-j}\),其中i是投掷的最大面值,j是投掷中几次投到最大值。
一看,这个公式,怎么化简啊?一看不知道,再看吓一跳:
\(\sum_{j=1}^{n}C_n^j(i-1)^{n-j}=C_n^1(i-1)^{n-1}+C_n^2(i-1)^{n-2}+...+C_n^n(i-1)^0\)是不是有点像二项式的展开式啊。
是什么的展开呢?
很显然其中一项是\((i-1)\),还有一项是1,所以想到了\((i-1)^n\),但不对啊,\((i-1)^n=C_n^0i^n(-1)^n+C_n^1i^1(-1)^{n-1}+...+C_n^ni^n\)。诶。。。推不走了,要是直接套用公式复杂度直接\(O(n^2)\),m和n都是\(10^5\)量级的,一秒根本不够。
只有另找公式了。
换个思路:既然是每次最大面值为i,那我投n次不超过i的数目是\(i^n\),每次投不超过i-1的数目是\((i-1)^n\),两者相减得到什么?就是最大为i的数目!还是必有为面值是i的情况,因为已经减了最大是i-1即以下的所有可能了。这样\(O(n)\)内可以算出结果。这里注意的是用pow函数因为参数是相邻的,可以把一个参数存起来供下一次迭代使用,从而减少计算量。还为了不让溢出,最后要总和除以\(m^n\),变成每次除以\(m^n\)再求和。
即\(\frac{pow(i,n)-pow(i-1,n)}{m^n}=\frac{pow(i/m,n)-pow((i-1)/m,n)}{1}\)。
对了顺带还证明了:\(\sum_{i=1}^{m}\sum_{j=1}^{n}i*C_n^j(i-1)^{n-j}=\sum_{i=1}^{m}i*(i^n-(i-1)^n)\)。
代码:
#include <iomanip>
using namespace std;
double n,m;
double ans = 0;
int main()
{
cin >> m >> n;
double tmp = 0;
double last = 0;
for(int i = 1;i<=m;i++)
{
tmp = pow(i/m,n);
ans += (tmp-last)*i;
last = tmp;
}
cout.setf(ios_base::fixed,ios_base::fixed);
cout << setprecision(12) << ans << endl;
return 0;
}
E. Little Pony and Expected Maximum(组合期望)的更多相关文章
- 【CF 453A】 A. Little Pony and Expected Maximum(期望、快速幂)
A. Little Pony and Expected Maximum time limit per test 1 second memory limit per test 256 megabytes ...
- Codeforces Round #259 (Div. 2) C - Little Pony and Expected Maximum (数学期望)
题目链接 题意 : 一个m面的骰子,掷n次,问得到最大值的期望. 思路 : 数学期望,离散时的公式是E(X) = X1*p(X1) + X2*p(X2) + …… + Xn*p(Xn) p(xi)的是 ...
- CF453A Little Pony and Expected Maximum 期望dp
LINK:Little Pony and Expected Maximum 容易设出状态f[i][j]表示前i次最大值为j的概率. 转移很显然 不过复杂度很高. 考虑优化.考虑直接求出最大值为j的概率 ...
- Codeforces Round #259 (Div. 1) A. Little Pony and Expected Maximum 数学公式结论找规律水题
A. Little Pony and Expected Maximum Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.c ...
- 嘴巴题9 Codeforces 453A. Little Pony and Expected Maximum
A. Little Pony and Expected Maximum time limit per test 1 second memory limit per test 256 megabytes ...
- CodeForces 454C Little Pony and Expected Maximum
Little Pony and Expected Maximum Time Limit:1000MS Memory Limit:262144KB 64bit IO Format:%I6 ...
- A. Little Pony and Expected Maximum
Twilight Sparkle was playing Ludo with her friends Rainbow Dash, Apple Jack and Flutter Shy. But she ...
- CodeForces - 453A Little Pony and Expected Maximum
http://codeforces.com/problemset/problem/453/A 题目大意: 给定一个m面的筛子,求掷n次后,得到的最大的点数的期望 题解 设f[i]表示掷出 <= ...
- Codeforces Round #259 (Div. 2) C - Little Pony and Expected Maximum
题目链接 题意:一个m个面的骰子,抛掷n次,求这n次里最大值的期望是多少.(看样例就知道) 分析: m个面抛n次的总的情况是m^n, 开始m==1时,只有一种 现在增加m = 2, 则这些情况是新增 ...
随机推荐
- Python窗体操作函数
实现了一个window下对窗体操作的类,实现的功能如:移动窗体.获取窗体位置和大小.截取窗体图片.坐标转换等. 直接上代码: # coding=utf-8 import win32con import ...
- python及Django的json序列化
JSON是一种文本序列化格式(它输出的是unicode文件,大多数时候会被编码为utf-8),人们很容易进行阅读和编写.python自带的dumps方法很有用,能很容易将字典dict类型数据转化为js ...
- python入门之垃圾回收机制
目录 一 引入 二.什么是垃圾回收机制? 三.为什么要用垃圾回收机制? 四.垃圾回收机制原理分析 4.1.什么是引用计数? 4.2.引用计数扩展阅读 4.2.1 标记-清除 4.2.2 分代回收 一 ...
- 014 Vue学习笔记1----Vue及Node、NPM
1.前端开发模式的发展过程 (1)静态页面 最初的网页以HTML为主,是纯静态的网页.网页是只读的,信息流只能从服务端到客户端单向流通.开发人员也只关心页面的样式和内容即可. (2)异步刷新,操作DO ...
- webStrom中React语法提示,React语法报错处理
1,webStrom中React语法报错 ①, 取消Power Save Mode的勾选 File——Power Save Mode ②,webstorm开发react-native智能提示 随便在一 ...
- 对JavaEE的简单理解
本文是在学习软件工程与J2EE课程时的学习笔记,旨在从大体的概念上了解Java EE的一些主要组件在Web应用中的作用. 上图精炼的描述了MVC模型以及Java EE的部分组件如何分布在一个Web应用 ...
- MySQL8.0 下载安装启动(Windows10)
2019年6月13日20:13:21 MySQL8.0 下载安装启动(Windows10) 下载 下载地址:https://dev.mysql.com/downloads/mysql/8.0.html ...
- cas sso 单点登录
一些介绍: https://www.jianshu.com/p/b7de8e4cf217 https://blog.csdn.net/javaloveiphone/article/details/52 ...
- AngularJS $http用法总结
最近由于项目需要,在研究AngularJS $http的用法,查了很多资料,发现貌似没有一篇内容可以完整的满足我对$http的基本了解,为了下次方便自己查找,所以特意把最近查到的一些资料和自己的理解记 ...
- nodejs中的_filename和_dirname
_filename和_dirname都不是全局对象下的属性,它们都是模块下的 _filename:返回当前模块文件被解析过后的绝对路径,该属性并非全局,而是模块作用域下的 console.log(_f ...