- 题意:
输入n、m,表示一个n面的色子(面上的值为1-n),投掷m次,求得到的最大值的期望(1?≤?m,?n?≤?105).
- 分析:
假设当前得到的最大值是Max,那么对应的概率是:sigma(C(m,k) * ((1 / n) ^ k )*(((Max - 1) / n) ^ (m - k)) ),(1 <= k <= n);化简就可以得到:sigma(C(m,k) * ((1 / n) ^ k )*(((Max - 1) / n) ^ (m - k)) ) - ((Max - 1) / n) ^ m,(0 <= k <= n);前半部分由二项式可以得到Max ^ m,那么化简结果就是Max ^ m - (Max - 1) ^ m。最后再乘以Max就是期望了。Max可以采用枚举的方式
感叹一下,才发现pow函数和快速幂的效率是一样的。。
int main () { int n, m; while (~RII(n, m)) { double ans = 0; FE(Max, 1, n) { ans += Max * (pow((double)Max / n, m) - pow((Max - 1.0) / n, m)); } printf("%.10f\n", ans); } return 0; }
Codeforces Round #259 (Div. 1)——Little Pony and Expected Maximum
时间: 2024-11-17 15:56:59