http://codeforces.com/problemset/problem/453/A
题目大意:
给定一个m面的筛子,求掷n次后,得到的最大的点数的期望
题解
设f[i]表示掷出 <= i 的点数的概率
ans = sigma{i*(f[i]-f[i-1])}
单个f[i]直接快速幂计算
1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 using namespace std; 5 typedef long long ll; 6 inline void read(int &x){ 7 x=0;char ch;bool flag = false; 8 while(ch=getchar(),ch<'!');if(ch == '-') ch=getchar(),flag = true; 9 while(x=10*x+ch-'0',ch=getchar(),ch>'!');if(flag) x=-x; 10 } 11 inline int cat_max(const int &a,const int &b){return a>b ? a:b;} 12 inline int cat_min(const int &a,const int &b){return a<b ? a:b;} 13 const int maxn = 100010; 14 double qpow(double x,int p){ 15 double ret = 1.0; 16 for(;p;p>>=1,x*=x) if(p&1) ret*=x; 17 return ret; 18 } 19 int main(){ 20 int n,m;read(n);read(m); 21 double ans = 0.0,last = .0,nw = .0; 22 for(int i=1;i<=n;++i){ 23 nw = qpow((double)i/(double)n,m); 24 ans += 1.0*i*(nw-last); 25 last = nw; 26 }printf("%lf ",ans); 27 getchar();getchar(); 28 return 0; 29 } 30