kmjp's blog

競技プログラミング参加記です

Codeforces #259 Div1 A. Jzzhu and Chocolate

反省点はあるにせよ、自己ベスト順位を取って赤復活。レートも自己ベストに。
http://codeforces.com/contest/453/problem/A

問題

整数M,Nが与えらえる。
M面サイコロをN回投げるとき、目の最大値の期待値を求めよ。

解法

最大値がxとなる確率は、(N回全部x以下の確率)-(N回全部x未満の確率)なので(\frac{x}{M})^N - (\frac{x-1}{M})^N
後はサイコロの目を掛ければ期待値。

先にx^Nや(x-1)^Nの計算をして後でM^Nで割ってる人がいたが、double型からそれだとあふれる。

int N,M;

void solve() {
	int f,i,j,k,l,x,y;
	
	cin>>M>>N;
	double ret=0;
	for(i=1;i<=M;i++) ret+=i*(pow(i/(double)M,N)-pow((i-1.0)/M,N));
	_P("%.12lf\n",ret);
}

まとめ

最初はもう少し面倒なコードを書いてしまった。