zoukankan      html  css  js  c++  java
  • 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);
    }
    
  • 相关阅读:
    Charles抓包使用教程
    学习规划
    log重复数据
    CNN实现推特文本分类
    conda env
    matplotlib画基础表
    决策树算法
    sklearn实现决策树
    分词与文本预处理工具
    matplotlib作图学习(1)
  • 原文地址:https://www.cnblogs.com/little-uu/p/14025452.html
Copyright © 2011-2022 走看看