CodeForces 453A

本文介绍了一个关于掷骰子游戏的问题,探讨了如何计算掷多次骰子后可能出现的最大点数的期望值,并给出了一种算法实现的方法。
部署运行你感兴趣的模型镜像

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, them-th face containsm 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 dicen times.

Input

A single line contains two integers m andn (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 exceed10  - 4.

Sample Input

Input
6 1
Output
3.500000000000
Input
6 3
Output
4.958333333333
Input
2 2
Output
1.750000000000

Hint

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:



题目大意:

求出最大点数的期望(这两个字被平均代替后瞬间没有高尚感- -)。

思路:

若有5个的6面骰子出现最大点为1的次数为1^5,出现最大点为2的的次数为2^5-1^5,以此来推出最大点出现的次数为i^5-(i-1)^5;

求出最大值得期望,由示例可以得到 p = ( (1^n-0^n)*1 + (2^n-1^n)*2 。。。 +(m^n - (m-1)^n)*m ) / m^n ;将m^n带入 最终得到 p = m - ((m-1)/m)^n + ((m-2)/m)^n。。。+(1/m)^n ;


#include<iostream>
#include<cstring>
#include<cstdio>
#include<string>
#include<cmath>
#include<map>
#include<queue>
#include<algorithm>
#define LL long long
int a[1010];
using namespace std;
int main()
{
    LL s;
    int i,j,n,m,k,inr,x;
    double sum;
    while(scanf("%d%d",&m,&n)!=EOF)
    {
        sum=0;
        for(i=1;i<=m;i++)
        {
            sum+=i*(pow(i*1.0/m,n)-pow((i-1)*1.0/m,n));<span id="transmark"></span>
        }
        printf("%.12lf\n",sum);
    }
}





您可能感兴趣的与本文相关的镜像

LobeChat

LobeChat

AI应用

LobeChat 是一个开源、高性能的聊天机器人框架。支持语音合成、多模态和可扩展插件系统。支持一键式免费部署私人ChatGPT/LLM 网络应用程序。

### 关于 Codeforces Problem 1804A 的解决方案 Codeforces 是一个广受欢迎的在线编程竞赛平台,其中问题 1804A 可能涉及特定算法或数据结构的应用。尽管未提供具体题目描述,但通常可以通过分析输入输出样例以及常见解法来推导其核心逻辑。 #### 题目概述 假设该问题是关于字符串处理、数组操作或其他基础算法领域的内容,则可以采用以下方法解决[^2]: 对于某些初学者来说,遇到不熟悉的语言(如 Fortran),可能会感到困惑。然而,在现代竞赛环境中,大多数情况下会使用更常见的语言(C++、Python 或 Java)。因此,如果题目提及某种神秘的语言,可能只是为了增加趣味性而非实际需求。 #### 解决方案思路 以下是基于一般情况下的潜在解答方式之一: ```cpp #include <bits/stdc++.h> using namespace std; int main(){ int t; cin >> t; // 输入测试用例数量 while(t--){ string s; cin >> s; // 获取每组测试数据 // 假设这里需要执行一些简单的变换或者判断条件... bool flag = true; // 初始化标志位为真 for(char c : s){ if(c != 'a' && c != 'b'){ flag = false; break; } } cout << (flag ? "YES" : "NO") << "\n"; // 输出结果 } return 0; } ``` 上述代码片段展示了一个基本框架,适用于许多入门级字符串验证类问题。当然,这仅作为示范用途;真实场景下需依据具体要求调整实现细节。 #### 进一步探讨方向 除了官方题解外,社区论坛也是获取灵感的好地方。通过阅读他人分享的经验教训,能够加深对该类型习题的理解程度。同时注意积累常用技巧并灵活运用到不同场合之中[^1]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值