设为首页 加入收藏

TOP

codeforces #259 DIV2 C题 Little Pony and Expected Maximum(容斥+快速幂+公式推导)
2015-07-20 18:01:19 来源: 作者: 【 】 浏览:3
Tags:codeforces #259 DIV2 Little Pony and Expected Maximum 容斥 快速 公式 推导

?

这题根据容斥原理可以推出公式:

期望P=((m^n-(m-1)^n)*m+((m-1)^n-(m-2)^n)*(m-1)+.......+(1^n-0^n)*1)/m^n;

这个公式还是挺容易推出来的。。从1到m的n次方可以用快速幂求出来。但是一个问题是数太大了,100000^10^5是一个有500W位的数字。。即使转换成double也存不下。那这时候应该怎么办呢。可以对公式进行化简。都对除数约分。

公式就成了:

期望P=((m/m)^n-((m-1)/m)^n)*m+(((m-1)/m)^n-((m-2)/m)^n)*(m-1)+....+((1/m)^n-(0/m)^n)*1).

这样的话大数据就不存在了。然后用快速幂求幂。时间复杂度m^lgn,已经足够了。

代码如下:

?

#include 
  
   
#include 
   
     #include 
    
      #include 
     
       #include 
      
        #include 
       
         #include 
        
          #include
          #include
          
            using namespace std; double a[110000]; double quickpow(double m,int n) { double b = 1; while (n > 0) { if (n & 1) b = b*m; n = n >> 1 ; m = m*m; } return b; } int main() { int n, m, i; double s=0, t; double ans; scanf(%d%d,&m,&n); a[0]=0; for(i=1;i<=m;i++) { a[i]=quickpow(i*1.0/m,n); //printf(%d ,a[i]); } for(i=m;i>=1;i--) { s+=(a[i]-a[i-1])*i; } //printf(%I64d ,s); printf(%.12lf ,s); return 0; } 
          
        
       
      
     
    
   
  


?

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇c++ 11学习笔记--智能指针 下一篇珍藏好料开源放送: windows平台..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: