主要是规避误差。即求

\[\frac{k![x^k](1+x+\frac {x^2}2)^n}{n^k}
\]

微分一下得到递推式。然后根据斯特林近似(byd 这里还需要 \(1\) 后的第一项。。)

\[k!=\frac{k^k}{e^k}\sqrt{2\pi k}(1+\frac{1}{12}k^{-1}-O(k^{-2}))
\]

然后在递推时记录 \(f_k=g_k\times \left(\frac{en}{k}\right)^{c_k}\) 即可转移。

注意代码里 \(n,k\) 是反的。

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int maxn=1e6+5;
// #define double long double
const double pi=acos(-1.0);
double f[maxn],e=0;int cnt[maxn];
double calc(int n,int k){
f[0]=1,f[1]=n,f[2]=(1.0*(n-1)*f[1]+n*f[0])/2.0;
double C=e*n/k;
while(f[2]>C)f[2]/=C,cnt[2]++;
for(int i=2;i<k;i++){
double T=(n-(i-1)/2.0)*f[i-1]/(i+1.0);
T+=(n-i)/(i+1.0)*f[i]*pow(C,cnt[i]-cnt[i-1]);
f[i+1]=T,cnt[i+1]=cnt[i-1];
while(f[i+1]>C)f[i+1]/=C,cnt[i+1]++;
// cout<<cnt[i+1]<<" "<<f[i+1]<<endl;
}
double ans=f[k]*pow(C,cnt[k]-k)*sqrt(2*pi*k)*(1+1/(12.0*k));
return 1.0-ans;
}
signed main(){
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
double z=1;
for(int i=1;i<=100;i++){
e+=z;if(i>0)z/=i;
}
int n,k;cin>>n>>k;
printf("%.10lf",calc(n,k));
return 0;
}

Project Euler 307 题解的更多相关文章

  1. project euler 169

    project euler 169 题目链接:https://projecteuler.net/problem=169 参考题解:http://tieba.baidu.com/p/2738022069 ...

  2. Python练习题 040:Project Euler 012:有超过500个因子的三角形数

    本题来自 Project Euler 第12题:https://projecteuler.net/problem=12 # Project Euler: Problem 12: Highly divi ...

  3. [project euler] program 4

    上一次接触 project euler 还是2011年的事情,做了前三道题,后来被第四题卡住了,前面几题的代码也没有保留下来. 今天试着暴力破解了一下,代码如下: (我大概是第 172,719 个解出 ...

  4. Python练习题 029:Project Euler 001:3和5的倍数

    开始做 Project Euler 的练习题.网站上总共有565题,真是个大题库啊! # Project Euler, Problem 1: Multiples of 3 and 5 # If we ...

  5. Project Euler 9

    题意:三个正整数a + b + c = 1000,a*a + b*b = c*c.求a*b*c. 解法:可以暴力枚举,但是也有数学方法. 首先,a,b,c中肯定有至少一个为偶数,否则和不可能为以上两个 ...

  6. Project Euler 44: Find the smallest pair of pentagonal numbers whose sum and difference is pentagonal.

    In Problem 42 we dealt with triangular problems, in Problem 44 of Project Euler we deal with pentago ...

  7. 【Project Euler 8】Largest product in a series

    题目要求是: The four adjacent digits in the 1000-digit number that have the greatest product are 9 × 9 × ...

  8. Project Euler 第一题效率分析

    Project Euler: 欧拉计划是一系列挑战数学或者计算机编程问题,解决这些问题需要的不仅仅是数学功底. 启动这一项目的目的在于,为乐于探索的人提供一个钻研其他领域并且学习新知识的平台,将这一平 ...

  9. Python练习题 049:Project Euler 022:姓名分值

    本题来自 Project Euler 第22题:https://projecteuler.net/problem=22 ''' Project Euler: Problem 22: Names sco ...

  10. Python练习题 048:Project Euler 021:10000以内所有亲和数之和

    本题来自 Project Euler 第21题:https://projecteuler.net/problem=21 ''' Project Euler: Problem 21: Amicable ...

随机推荐

  1. SpringMVC源码剖析(四)- DispatcherServlet请求转发的

    SpringMVC完成初始化流程之后,就进入Servlet标准生命周期的第二个阶段,即"service"阶段.在"service"阶段中,每一次Http请求到来 ...

  2. Git之实战命令

    相关概念: HEAD: 说简单一点,HEAD就是当前活跃分支的游标. 形象的记忆就是:你现在在哪儿,HEAD就指向哪儿,所以Git才知道你在那儿! 不过HEAD并非只能指向分支的最顶端(时间节点距今最 ...

  3. vue结合element UI做checkbox全选的tree结构

    由于element UI中的tree可能不能满足项目中的样式需求,所以自己动手结合element中的checkbox全选功能实现了一个符合项目需求的tree.效果如下: html部分: <tem ...

  4. Graylog之进阶操作

    有关系统的索引,权限,pipline 参考文章: https://mp.weixin.qq.com/s/LROHPjZEJPMsS5M_a3pPFw https://blog.csdn.net/wei ...

  5. Winform解决跨线程更新UI的问题

    最近又拿起了Winform的程序,由于要起socket server,所以需要起线程,这里就遇到了经典的跨线程UI调用的问题. 如果什么都不写,直接由线程更新UI,会报错:线程间操作无效. 这里的解决 ...

  6. 使用Nginx搭建流媒体服务器

    目录 什么是流媒体服务器 Nginx如何实现流媒体服务器 为Nginx安装nginx-http-flv-module 概述 流程 操作步骤 配置流媒体服务器 使用OBS推流 使用VLC拉RTMP 使用 ...

  7. js模拟点击下载文件到本地

    function fake_click(obj) { var ev = document.createEvent("MouseEvents"); ev.initMouseEvent ...

  8. CCF中国开源大会,中电金信与行业共探AI技术在金融行业的应用和前景

    ​ 10月21日,以"开源联合,聚力共赢"为主题的2023 CCF中国开源大会在长沙开幕.中电金信副总经理.研究院院长况文川参加峰会,在"算力与大模型"主题论坛 ...

  9. 【单片机】初次实验:Keil51的使用

    哔哩哔哩/CSDN/博客园:萌狼蓝天 延时器 delay(int count){ int i,j; for(i=0;i<count;i++){ for(j=0;j<1000;j++); } ...

  10. 【C#】【MySQL】【配置数据源】SSL Connection error 发生一个或多个错误。由于·意外的数据包格式,握手失败

    [编程语言]C# [数据库]MySQL [控件]SqlDataSource [问题描述]使用SqlDataSource远程连接数据库时,测试连接发生如下错误:"SSL Connection ...