CF453A Little Pony and Expected Maximum 數學題
阿新 • • 發佈:2021-07-10
CF453A Little Pony and Expected Maximum 數學題
這個題比較水。連我都能做出來
這個題我們直接考慮最大值為 \(k\) 時的概率是多少。
我們設 \(p_k\) 為最大值為 \(k\) 時的概率。令 \(f_k\) 表示 \(m\) 到 \(k\) 的所有值一個也沒有出現的概率。
如果最大值為 \(k\) ,那麼說明比 \(k\) 大的數一個也沒有出現,而 \(k\) 至少出現一次。
也就是說,\(f_{k+1}\) 這個概率裡包含兩個部分,其中一個部分是 \(f_k\) ,也就是 \(k\) 沒有出現,另一個部分是 \(k\) 至少出現一次。也就是說 \(f_{k+1}-f_{k}\)
我們用快速冪一算就可以。
程式碼:
#include<bits/stdc++.h> #define dd double #define ld long double #define ll long long #define uint unsigned int #define ull unsigned long long #define N 100010 #define M number using namespace std; const int INF=0x3f3f3f3f; template<typename T> inline void read(T &x) { x=0; int f=1; char c=getchar(); for(;!isdigit(c);c=getchar()) if(c == '-') f=-f; for(;isdigit(c);c=getchar()) x=x*10+c-'0'; x*=f; } int m,n; dd p[N],ans; inline dd ksm(dd a,int b){ dd res=1.0; while(b){ if(b&1) res*=a; a=a*a; b>>=1; } return res; } int main(){ read(m);read(n); p[m+1]=1; for(int i=m;i>=1;i--){ p[i]=ksm((dd)(i-1)/(dd)m,n); ans+=(p[i+1]-p[i])*i; } printf("%lf\n",ans); return 0; }