codeforces #259 DIV2 C題 Little Pony and Expected Maximum(容斥+快速冪+公式推導),

來源:互聯網
上載者:User

codeforces #259 DIV2 C題 Little Pony and Expected Maximum(容斥+快速冪+公式推導),

題目地址:http://codeforces.com/contest/454/problem/C

這題根據容斥原理可以推出公式:

期望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 <iostream>#include <stdio.h>#include <string.h>#include <stdlib.h>#include <math.h>#include <ctype.h>#include <queue>#include <map>#include<algorithm>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\n",s);    printf("%.12lf\n",s);    return 0;}



codeforces問題: codeforces比賽怎攻擊別人?

對某一題,首先你自己要先過TEST。然後回到比賽的PROBLEM列表,把這題後面的鎖鎖上(鎖上了就不能再提交了,所以沒把握就別鎖了),然後到ROOM裡面,你就可以看別人代碼了,下面有HACK按鈕,點一下,輸入你覺得他錯的範例。
 
codeforces上怎看測試資料

進入比賽,點MY SUBMISSIONS,然後再點#號下面的運行編號,就可以看到測試資料了
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.