设 f(m) 表示m次演讲后忽悠的期望,那么很容易得出:
f(m)=f(m-1)+1*(n-f(m-1))/n
整理得到
f(m)-n=(n-1)/n*(f(m-1)-n)
公式有了,然后就是卡精度问题。。。。
__float128 有这么一个神奇的东西。。。。
#include<bits/stdc++.h>
using namespace std;
__float128 powf(__float128 x,long long p)
{
__float128 ret=1.0;
while(p)
{
if(p&1)
ret=ret*x;
x=x*x;
p>>=1;
}
return ret;
}
int main()
{
int T;
__float128 ans;
long long n,m;
scanf("%d",&T);
while(T--)
{
scanf("%lld%lld",&n,&m);
ans=n-n*powf((__float128)(n-1)/n,m);
printf("%.7f\n",(double)ans);
}
}