题目描述:

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:

  1. You can get 1 in the first toss, and 2 in the second. Maximum equals to 2.
  2. You can get 1 in the first toss, and 1 in the second. Maximum equals to 1.
  3. You can get 2 in the first toss, and 1 in the second. Maximum equals to 2.
  4. 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(组合期望)的更多相关文章

  1. 【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 ...

  2. 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)的是 ...

  3. CF453A Little Pony and Expected Maximum 期望dp

    LINK:Little Pony and Expected Maximum 容易设出状态f[i][j]表示前i次最大值为j的概率. 转移很显然 不过复杂度很高. 考虑优化.考虑直接求出最大值为j的概率 ...

  4. 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 ...

  5. 嘴巴题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 ...

  6. CodeForces 454C Little Pony and Expected Maximum

    Little Pony and Expected Maximum Time Limit:1000MS     Memory Limit:262144KB     64bit IO Format:%I6 ...

  7. A. Little Pony and Expected Maximum

    Twilight Sparkle was playing Ludo with her friends Rainbow Dash, Apple Jack and Flutter Shy. But she ...

  8. CodeForces - 453A Little Pony and Expected Maximum

    http://codeforces.com/problemset/problem/453/A 题目大意: 给定一个m面的筛子,求掷n次后,得到的最大的点数的期望 题解 设f[i]表示掷出 <= ...

  9. Codeforces Round #259 (Div. 2) C - Little Pony and Expected Maximum

    题目链接 题意:一个m个面的骰子,抛掷n次,求这n次里最大值的期望是多少.(看样例就知道) 分析: m个面抛n次的总的情况是m^n, 开始m==1时,只有一种 现在增加m = 2,  则这些情况是新增 ...

随机推荐

  1. DevOps - 基础设施配置测试工具Serverspec

    1 - Serverspec Serverspec是可以测试基础设施配置的工具,能够验证配置管理工具(Ansible.Puppet.Chef等)的配置结果,可以实现基础设施测试代码化自动化. 测试代码 ...

  2. cocoapods安装 Unable to download data from http://ruby.taobao.org/ & don't have write permissions for the /Library/Ruby/Gems/2.0.0 directory.

    安装cocoapods,记录两个问题! 1.镜像已经替换成了 http://ruby.taobao.org/, 还是不能不能安装cocoapods, 报错:Unable to download dat ...

  3. Mysql 查询时间段是否可用,查询时间段是否有交集

    最近遇到 类似, 会议室预订的模型,  基本上 是  会议室 + 时间段来检测是否被占用. 其实思路比较简单 , 一开始的思路是 去查询 自己选择的时间段 与数据库已经存在的时间段匹配  是否 可用, ...

  4. 安卓、IOS端AEC密钥加密 Java端密钥解密通用实现(16进制表现形式)

    由于业务需求,需要实现在客户端对重要信息进行加密,在服务端进行解密.客户端包括IOS和安卓的 服务端位Java. 注意密钥 需要保持一致,可以自己定义 . 安卓端加密代码: ============= ...

  5. 处理html换行问题

    String.prototype.replaceAll = function (FindText, RepText) { regExp = new RegExp(FindText, "g&q ...

  6. Qt中 布局管理器失效问题

    1 问题描述 在Qt5.12.0 版本中,使用 自动管理器发生,无法生效 2 问题代码 Widget::Widget(QWidget *parent) : QWidget(parent), butto ...

  7. python学习-30 总结

    小结 1.map函数: 处理序列中的每个元素,得到结果是一个‘列表’,该‘列表’元素个数及位置与原来一样 2.filter:遍历序列中的每个元素,判断每个元素得到的布尔值,如果是True则留下来,例如 ...

  8. MySQL多表查询,Navicat使用,pymysql模块,sql注入问题

    一.多表查询 #建表 create table dep( id int, name varchar(20) ); create table emp( id int primary key auto_i ...

  9. Python之路【第十七篇】:Python并发编程|协程

    一.协程 协程,又叫微线程,纤程.英文名Coroutine.协程本质上就是一个线程 优点1:协程极高的执行效率.因为子程序切换不是线程切换,而是由程序自身控制,因此,没有线程切换的开销,和多线程比,线 ...

  10. epoll原理

    系统调用说明 epoll_create:在内核中创建epoll结构 epoll_ctl:add 1. 调用监听的文件的poll方法,设置callback 2. 设备就绪时唤醒等待队列上的进程,此时会调 ...