题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4652
题意:一个m个面的筛子。两种询问:(1)平均抛多少次后使得最后n次的面完全一样;(2)平均抛多少次后使得最后n次的面完全不同?
思路:设dp[i]表示i次完全相同、不同时还需要抛的次数期望。
(1)下面首先讨论完全相同的情况。
(2)完全不同的情况:
i64 Pow(int n,int m)
{
i64 ans=1,x=n;
while(m)
{
if(m&1) ans*=x;
x*=x;
m>>=1;
}
return ans;
}
int main()
{
int C;
Rush(C)
{
int op,n,m;
while(C--)
{
RD(op,m,n);
if(op==0) PR((Pow(m,n)-1)/(m-1));
else
{
double ans=1,x=1;
int i;
FOR1(i,n-1) x=x*m/(m-i),ans+=x;
PR(ans);
}
}
}
}