题面

传送门

题解

orz shadowice

正态分布

正态分布是随机变量\(X\)的一种概率分布形式。它用一个期望\(\mu\)和方差\(\sigma^2\)就可以描述,记为\(N(\mu,\sigma^2)\)。
若随机变量\(X\)服从一个数学期望为\(\mu\)、方差为\(\sigma^2\)的正态分布,记作\(X\)∼\(N(\mu,\sigma^2)\),读作\(X\)服从\(N(\mu,\sigma^2)\)。
当\(\mu=0,\sigma=1\)时的正态分布称为标准正态分布。

概率密度函数

用来描述连续型随机变量的分布情况。随机变量的取值落在某个区域内的概率,为概率密度函数在该区域的积分。(或者就是\(f(x)\)在该区域内与\(x\)轴围成的图形面积)
若随机变量\(X\)∼\(N(\mu,\sigma^2)\),则其概率密度函数为

\[f(x)=\frac{1}{\sqrt{2\pi}\sigma}e^{-\frac{(x-\mu)^{2}}{2\sigma^{2}}}\]

只要证明了一个变量服从正态分布,就可以直接对概率密度函数的这一区间进行积分了

中心极限定理

当样本量n逐渐趋于无穷大时,n个抽样样本的均值的频数逐渐趋于正态分布(无论总体是什么分布)。
该定理说明,设随机变量\(X_1,X_2,…,X_n\)独立同分布,它们的期望为\(\mu\)、方差为\(\sigma^2\),当\(n\)足够大时(满足精确度需求时),随机变量

\[Y_{n}=\frac{\sum_{i=1}^{n}x_{i}-n\mu}{\sqrt{n}\sigma}\]

\(Y_n\)服从正态分布,求出其范围后就可以直接对正态分布的概率密度函数求积分了。

本题

然后关于本题有

\[\mu=\frac{n-1}{2},\sigma^2=\frac{\sum_{i=1}^n(i-\mu)^2}{n}=\frac{n^2-1}{12}\\\sum_{i=1}^nX_i\in[A,B]\\Y_n\in[\frac{A-n\mu}{\sqrt n\sigma},\frac{B-n\mu}{\sqrt n\sigma}]\]

那么我们对于\(Y_n\)的值域直接上自适应辛普森法就行了

然而还有一个问题,就是\(n\)等于\(1\)之类的情况我们显然不能认为它满足精度限制

那么我们构造出概率的生成函数,\(F(z)=\sum_{i=0}^{x-1}{1\over x}z^i\),只要求出\(F^y(z)\)的第\(l\)到\(r\)项系数就行了。而且这里多项式快速幂可以直接把点值给快速幂

听说余奶奶直接用生成函数艹过去了……完全没用到任何概率论的芝士……orz

//minamoto
#include<bits/stdc++.h>
#define R register
#define fp(i,a,b) for(R int i=(a),I=(b)+1;i<I;++i)
#define fd(i,a,b) for(R int i=(a),I=(b)-1;i>I;--i)
#define go(u) for(int i=head[u],v=e[i].v;i;i=e[i].nx,v=e[i].v)
using namespace std;
const int N=(1<<19)+5;const double Pi=acos(-1.0),K=1.0/sqrt(2*Pi),eps=1e-7;
int read(){R int res,f=1;R char ch;while((ch=getchar())>'9'||ch<'0')(ch=='-')&&(f=-1);for(res=ch-'0';(ch=getchar())>='0'&&ch<='9';res=res*10+ch-'0');return res*f;
}
struct cp{double x,y;cp(){}cp(R double xx,R double yy):x(xx),y(yy){}inline cp operator +(const cp &b)const{return cp(x+b.x,y+b.y);}inline cp operator -(const cp &b)const{return cp(x-b.x,y-b.y);}inline cp operator *(const cp &b)const{return cp(x*b.x-y*b.y,x*b.y+y*b.x);}inline cp operator *(const double &b)const{return cp(x*b,y*b);}
}A[N],O[N];
int r[N],lim,l,X,Y,L;double res;
inline cp ksm(R cp x,R int y){R cp res(1,0);for(;y;y>>=1,x=x*x)if(y&1)res=res*x;return res;
}
void FFT(cp *A,int ty){fp(i,0,lim-1)if(i<r[i])swap(A[i],A[r[i]]);for(R int mid=1;mid<lim;mid<<=1)for(R int j=0;j<lim;j+=(mid<<1))fp(k,0,mid-1){R cp x=A[j+k],y=A[j+k+mid]*O[mid+k];A[j+k]=x+y,A[j+k+mid]=x-y;}if(ty==-1){reverse(A+1,A+lim);R double k=1.0/lim;fp(i,0,lim-1)A[i]=A[i]*k;}
}
inline double F(R double x){return K*exp(-x*x*0.5);}
inline double simpson(R double l,R double r){return (F(l)+F(r)+4*F((l+r)/2))*(r-l)/6;}
double calc(double l,double r,double eps,double res){double mid=(l+r)/2,ql=simpson(l,mid),qr=simpson(mid,r);if(fabs(ql+qr-res)<=15*eps)return ql+qr+(ql+qr-res)/15;return calc(l,mid,eps/2,ql)+calc(mid,r,eps/2,qr);
}
void solve1(){fp(i,0,lim-1)A[i]=cp(0,0),r[i]=(r[i>>1]>>1)|((i&1)<<(l-1));for(R int i=1;i<lim;i<<=1)fp(k,0,i-1)O[i+k]=cp(cos(Pi*k/i),sin(Pi*k/i));R double xx=1.0/X;fp(i,0,X-1)A[i].x=xx;FFT(A,1);fp(i,0,lim-1)A[i]=ksm(A[i],Y);FFT(A,-1);fp(i,1,lim-1)A[i].x+=A[i-1].x;for(R int i=1,l,r;i<=10;++i)l=read(),r=read(),printf("%.7lf\n",l?A[r].x-A[l-1].x:A[r].x);
}
void solve2(){double l,r,mu=1.0*(X-1)/2,sigma=1.0*(X*X-1)/12,a=mu*Y,b=sqrt(sigma*Y);fp(i,1,10){l=1.0*(read()-a)/b,r=1.0*(read()-a)/b;printf("%.7lf\n",calc(0,r,eps,simpson(0,r))-calc(0,l,eps,simpson(0,l)));}
}
int main(){
//  freopen("testdata.in","r",stdin);for(int T=read();T;--T){X=read(),Y=read(),L=X*Y,lim=1,l=0;while(lim<=L)lim<<=1,++l;lim<N?solve1():solve2();}return 0;
}

转载于:https://www.cnblogs.com/bztMinamoto/p/10529345.html

洛谷P3779 [SDOI2017]龙与地下城(概率论+Simpson+FFT)相关推荐

  1. BZOJ.4909.[SDOI2017]龙与地下城(正态分布 中心极限定理 FFT Simpson积分)

    BZOJ 洛谷 [Update 18.11.5] 晚上没事看了看课本,这不(大部分)是数学选修2-3的内容么..也许没有那么...啊? [Update 19.5] 学了学文化课觉得,这tm不就是数学选 ...

  2. [LOJ2267][SDOI2017]龙与地下城-FFT-自适应辛普森积分

    龙与地下城 Description 小Q同学是一个热爱学习的人,但是他最近沉迷于各种游戏,龙与地下城就是其中之一. 在这个游戏中,很多场合需要通过掷骰子来产生随机数,并由此决定角色未来的命运,因此骰子 ...

  3. 洛谷 - P3803 【模板】多项式乘法(FFT/NTT)

    题目链接:点击查看 题目大意:给出两个多项式 F( x ) 和 G( x ) 的系数,求其卷积后的系数 题目分析:存一个FFT的模板,原理学不明白,数论和dp都扔给队友了,当个快乐的fw 代码: // ...

  4. 洛谷P3803 【模板】多项式乘法(FFT)

    传送门 FFT我啥都不会,先坑着 1 //minamoto 2 #include<iostream> 3 #include<cstdio> 4 #include<cmat ...

  5. 洛谷 P1019 单词接龙 (DFS)

    题目传送门 当时一看到这题,蒟蒻的我还以为是DP,结果发现标签是搜索-- 这道题的难点在于思路和预处理,真正的搜索实现起来并不难.我们可以用一个贪心的思路,开一个dic数组记录每个单词的最小重复部分, ...

  6. 洛谷P1019 单词接龙

    题目描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的"龙"(每个单词都最多在"龙" ...

  7. 洛谷-DFS-1019-单词接龙-个人AC题解和公共AC题解笔记

    学习内容: 预处理 万能头文件 string的使用 话不多说,直奔主题 本人AC代码 #include<iostream> #include<cstdio> #include& ...

  8. 信息学奥赛一本通 1220:单词接龙 | 1913:【00NOIP普及组】单词接龙 | OpenJudge NOI 2.5 8783 | 洛谷 P1019 [NOIP2000 提高组] 单词接龙

    [题目链接] ybt 1220:单词接龙 ybt 1913:[00NOIP普及组]单词接龙 OpenJudge NOI 2.5 8783:单词接龙 洛谷 P1019 [NOIP2000 提高组] 单词 ...

  9. 深度优先搜索——单词接龙(洛谷 P1019)

    题目选自洛谷P1019 首先在题意上可能有些误解. 两个单词合并时,合并部分取的是最小重叠部分 相邻的两部分不能存在包含关系就是说如果存在包含关系,就不能标记为使用过. 每个单词最多出现两次. (其实 ...

最新文章

  1. SQL优化常用方法36
  2. 初学 Python(十三)——匿名函数
  3. lua源代码分析01:lua源代码结构分析
  4. HDU2504 又见GCD
  5. 实现串匹配的并行算法_5-1-KMP模式匹配
  6. 网络规划设计师学习攻略(2)
  7. FAQ宝典之Rancher Server
  8. Android P:BottomAppBar和MaterialButton
  9. Spring - 理解BeanPostProcessor
  10. nginx优化配置(转)
  11. A* 算法求解八数码问题
  12. java等额本息、等额本金计算Mark
  13. docker安装gamit_gamit的安装步骤
  14. 避坑11_VScode在vue文件内template无法使用tab补齐标签
  15. 手机浏览器打开微信app的方法
  16. 关于门户网站下载文件.doc文件直接打开成压缩包格式的解决办法
  17. Chrome插件安装失败,此扩展程序可能已损坏。
  18. MATLAB2020a WIN10安装教程
  19. python统计重复的数_python统计一个文本中重复行数的方法
  20. 【爬虫】简单爬取和处理数据

热门文章

  1. RxJava Rxandroid 结合 Retrofit 使用
  2. 【JavaWeb】Access restriction The type is not accessible due to restriction on required library
  3. Android Studio 新建项目的R文件丢失的解决方法
  4. mongodb数据合并设计_MongoDB:如何将来自多个集合的数据合并成一个.?
  5. C语言函数集(二十)
  6. windows 下配置 react native 开发环境
  7. DWM1000 长距离模块讨论
  8. python数据类型之内置方法
  9. 首字母大写 -freeCodeCamp
  10. Ext.data.Connection