题目:
国王庆祝生日,第
i天花费2i−1
(千)个硬币,至于哪一天结束,给定一个正整数
k
,每天抛一次硬币,如果出现第
问庆祝的天数和花费的金币的期望。
思路:
设
则有,
pk∗∑∞i=k((i−1k−1)∗(1−p)i−k)=1
,即:
∑∞i=k((i−1k−1)∗(1−p)i−k)=1pk
,
令
g(k)=∑∞i=k((i−1k−1)∗(1−p)i−k)=1pk
那么,天数的期望:
days=∑∞i=k(i∗f(i))=pk×∑∞i=k(i×(i−1k−1)×(1−p)i−k)=kpk×∑∞i=k((ik)×(1−p)i−k)=kpkg(k+1)=k×pkpk+1=kp
花费的期望:
cost=∑∞i=k(i2f(i))//第i天结束的话就花费1+3+5+...+2i−1=i2;=pk×∑(i2(i−1k−1)×(1−p)i−k)=kpk×∑(i(ik)×(1−p)i−k)=kpk×∑((i+1)×(ik)×(1−p)i−k)−kpk×∑((ik)∗(1−p)i−k)=k(k+1)pk∑((i+1k+1)∗(1−p)i−k)−kpkg(k+1)=k(k+1)×pkpk+2−days=k(k+1)p2−days=days×k+1p−days
#include <iostream>
#include <cmath>
#include <stdio.h>
#include <map>
#include <algorithm>
using namespace std;
#define LL long long
#define MAX 1000010
int main()
{
int n,k;
double p;
while (scanf("%d",&k),k)
{
scanf("%lf",&p);
double ans=k/p;
printf("%.3lf %.3lf\n",ans,ans*(k+1)/p-ans);
}
}