其他分享
首页 > 其他分享> > CF453A

CF453A

作者:互联网

题解

我们可以试图求出取n个中存在最大值为k的概率,为 \(\frac{n^k - n^{k-1}}{n^m}\)

证明:

每个数都不超过\(k\)的方案数为\(n^k\),因为每个数都有\(k\)中选法

每个数都不超过\(k-1\)的方案数为\(n^{k-1}\),因为每个数都只有\(k-1\)中选法

两式相减得到的就是每个数都小于\(k\)又不全小于\(k-1\),即至少有一个数为\(k\)的方案数

那么 ans += i*(fpow(1.0*i/m,n) - fpow(1.0*(i-1)/m,n));

#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;

int read()
{
	int a = 0,x = 1;char ch = getchar();
	while(ch > '9' || ch < '0') {if(ch == '-') x = -1;ch = getchar();}
	while(ch >= '0' && ch <= '9') {a = a*10 + ch-'0';ch = getchar();}
	return a*x;
}

int n,m;

double fpow(double a,int x)
{
	if(x == 1) return a;
	if(x == 0) return 1;
	double t = fpow(a,x/2);
	if(x&1) return t*t*a;
	else return t*t;
}

int main()
{
	m = read(),n = read();
	double ans = 0;
	for(int i = 1;i <= m;i ++) {
		ans += i*(fpow(1.0*i/m,n) - fpow(1.0*(i-1)/m,n));
	}
	printf("%.10f",ans);
}

标签:ch,1.0,每个,数为,数都,include,CF453A
来源: https://www.cnblogs.com/little-uu/p/14025452.html