因为每张卡片出现的概率相同,所以取b次出现这张卡片的概率为1- pow ( x-1/x , b ) ,利用了互补性,找出这张卡片不会出现的概率,进而算出它出现的概率,然后用前缀和乘以概率得到的就是期望
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
#include <cmath>
#define MAX 100007
using namespace std;
long long sum[MAX];
int main ( )
{
sum[0] = 0;
for ( int i = 1 ; i <= 100000 ; i++ )
sum[i] = sum[i-1] + i;
int t,x,b;
int c = 1;
scanf ( "%d" , &t );
while ( t-- )
{
scanf ( "%d%d" , &x , &b );
double p = 1.0 - pow ( (x-1)*1.0/(x*1.0) , b*1.0 );
printf ( "Case #%d: " , c++ );
printf ( "%.3f\n" , sum[x]*1.0*p );
}
}