转化一下模型:每天可以选1也可以选0,但是任意前i天(i<=n)1的个数都必须>=0的个数,求总方案数/2^n。

然后可以发现这是一个经典题,随便推一下公式发现等于  C(n,n/2)/2^n  [请在二维平面直角坐标系上自行演算,(x,y)可以到 (x+1,y)和(x,y+1),横坐标代表1的个数,纵坐标代表0的个数,求不经过 y=x+1 这条直线的路径总数  (终点是 任意 (x,y) 满足 x+y==n 且 x>=y)]

本来以为卡卡常数就过去了23333,没想到竟然还要用 阶乘逼近公式!

那就记一下好啦,反正这玩意也根本没法理解啊qwq

当n很大 的时候,n! 与 sqrt(2*π*n) * (n/e)^n 之间的相对误差非常小(然鹅?),所以可以近似成相等啦

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#define ll long long
#define D double
using namespace std;
const D pi=acos(-1),E=exp(1);
D now=1,ans=1,B=log(4);
int n,hf; inline void solve(){
hf=n>>1;
if(n&1){ ans=n/(D)(n-hf)/2,n--;} ans=log(ans);
for(int i=hf+1;i<=n;i++) ans+=log(i)-log(i-hf)-B;
ans=exp(ans);
} inline D jc(int x){ return log(sqrt(2*pi*x))+x*log(x/E);} inline void Sim(){
ans=jc(n)-jc(n>>1)-jc(n-(n>>1))-log(2)*n;
ans=exp(ans);
} int main(){
freopen("fair.in","r",stdin);
freopen("fair.out","w",stdout); cin>>n;
if(n<=1e6) solve();
else Sim();
printf("%.11lf\n",ans);
return 0;
}

  

最新文章

  1. 大白话讲解Promise(三)搞懂jquery中的Promise
  2. 通过jquery获取天气的方法
  3. img base64
  4. 关于解决 The processing instruction target matching &quot;[xX][mM][lL]&quot; is not allowed
  5. 全面理解BFC
  6. WM_VSCROLL
  7. java中ExecutorService接口
  8. Visio 下载,及密钥
  9. Longest Substring Without Repeating Characters - 哈希与双指针
  10. HDU 4520 小Q系列故事——最佳裁判
  11. ymodem协议c实现(转)
  12. 对ios、android开发程序员的14条忠告
  13. eclipse项目无故报错,markers信息为An error occurred while filtering resources
  14. 利用jsoncpp将json字符串转换为Vector
  15. C# 如何提取字符串中的数字
  16. Win7 VS2015及MinGW环境编译矢量库agg-2.5和cairo-1.14.6
  17. Python 读取文件中unicode编码转成中文显示问题
  18. IOS中的网络编程详解
  19. EnrichPipeline文档
  20. Flask租房项目总结

热门文章

  1. Contest1893 - 2019年6月多校联训b层测试1
  2. data相关应用
  3. AppDOMain(摘录)
  4. Leetcode 529.扫雷游戏
  5. 【转载】主成分分析法(PCA)
  6. RESTful-rest_framework视图层-第三篇
  7. [python][django学习篇][3]创建django web的数据库模型
  8. 微信Oauth2.0网页开放授权
  9. .net学习笔记--设计模式
  10. [hdu5307] He is Flying [FFT+数学推导]