bzoj 4909 [Sdoi2017]龙与地下城
题面
https://www.lydsy.com/JudgeOnline/problem.php?id=4909
题解
目前为止仅仅在LOJ上A掉这道题(Loj真快!)
当然不是标准做法
显然我们只要求一个
然后$a^n$的系数就表示选n个的方案数
那么我们找到
然后$a^n$的系数就表示选n个的概率
FFT即可
按理说这东西只能过60分但是LOJ的评测机成功过掉...而且时限4秒最慢一个点只用3秒!!!
Code
#include<bits/stdc++.h>
using namespace std;
typedef long long ll; ll read(){
ll x=,f=;char c=getchar();
while(c<'' || c>''){if(c=='-')f=-;c=getchar();}
while(c>='' && c<=''){x=x*+c-'';c=getchar();}
return x*f;
}
const int maxn=;
struct Complex{
double re,im;
Complex(){
re=im=;
}
Complex(double alpha){
re=cos(alpha);
im=sin(alpha);
}
Complex(double _re,double _im){
re=_re;
im=_im;
}
Complex operator + (const Complex &x){
return Complex(re+x.re,im+x.im);
}
Complex operator - (const Complex &x){
return Complex(re-x.re,im-x.im);
}
Complex operator * (const Complex &x){
return Complex(re*x.re-im*x.im,re*x.im+im*x.re);
}
Complex operator += (const Complex &x){
return *this=*this+x;
}
Complex operator *= (const Complex &x){
return *this=*this*x;
}
} A[maxn],B[maxn]; int fft_lst,poly_rev[maxn];
inline void fft_init(int n){
if(fft_lst==n) return;
fft_lst=n;
for(int i=,j=n>>;i+<n;i++){
poly_rev[i]=j;
int k=n>>;
while(j>=k){
j-=k;
k>>=;
}
j+=k;
}
} inline void poly_fft(Complex *a,int len,bool f){
fft_init(len);
for(int i=;i+<len;i++)
if(i<poly_rev[i]) swap(a[i],a[poly_rev[i]]);
for(int i=;i<len;i<<=){
Complex off((f ? -acos(-1.0) : acos(-1.0))/i);
for(int j=;j<len;j+=i<<){
Complex cur();
for(int k=j;k<j+i;k++,cur*=off){
Complex x=a[k+i]*cur;
a[k+i]=a[k]-x;
a[k]+=x;
}
}
}
if(f){
for(int i=;i<len;i++)
a[i].re/=len;
}
} int tc; int main(){
#ifdef LZT
freopen("in","r",stdin);
#endif
tc=read();
while(tc--){
int x=read(),y=read();
int mx=x*y,len=;
while(len<mx) len<<=;
for(int i=;i<len;i++)
A[i]=B[i]=Complex();
for(int i=;i<x;i++)
A[i].re=1.0/x;
poly_fft(A,len,false);
for(int i=;i<len;i++){
int nw=y;
B[i]=Complex(,);
while(nw){
if(nw&) B[i]*=A[i];
A[i]*=A[i];
nw>>=;
}
}
poly_fft(B,len,true);
for(int i=;i<len;i++)
B[i].re+=B[i-].re;
for(int i=;i<=;i++){
int l=read(),r=read();
printf("%.8lf\n",B[r].re-(l?B[l-].re:));
}
}
return ;
}
bzoj 4909 [Sdoi2017]龙与地下城的更多相关文章
- BZOJ.4909.[SDOI2017]龙与地下城(正态分布 中心极限定理 FFT Simpson积分)
BZOJ 洛谷 https://www.luogu.org/blog/ShadowassIIXVIIIIV/solution-p3779# 正态分布 正态分布是随机变量\(X\)的一种概率分布形式.它 ...
- 洛谷P3779 [SDOI2017]龙与地下城(概率论+Simpson+FFT)
题面 传送门 题解 orz shadowice 正态分布 正态分布是随机变量\(X\)的一种概率分布形式.它用一个期望\(\mu\)和方差\(\sigma^2\)就可以描述,记为\(N(\mu,\si ...
- LOJ2267 SDOI2017 龙与地下城 FFT、概率密度函数、Simpson
传送门 概率论神仙题-- 首先一个暴力做法是设\(f_{i,j}\)表示前\(i\)个骰子摇出点数和为\(j\)的概率,不难发现DP的过程是一个多项式快速幂,FFT优化可以做到\(O(XYlog(XY ...
- (WA)BZOJ 4821: [Sdoi2017]相关分析
二次联通门 : BZOJ 4821: [Sdoi2017]相关分析 2017.8.23 Updata 妈妈!!这道题卡我!!!就是不然我过!!!!! #include <cstdio> # ...
- [BZOJ 4820] [SDOI2017] 硬币游戏(高斯消元+概率论+字符串hash)
[BZOJ 4820] [SDOI2017] 硬币游戏(高斯消元+概率论+字符串hash) 题面 扔很多次硬币后,用H表示正面朝上,用T表示反面朝上,会得到一个硬币序列.比如HTT表示第一次正面朝上, ...
- BZOJ:4820: [Sdoi2017]硬币游戏&&BZOJ:1444: [Jsoi2009]有趣的游戏(高斯消元求概率)
1444: [Jsoi2009]有趣的游戏 4820: [Sdoi2017]硬币游戏 这两道题都是关于不断随机生成字符后求出现给定字符串的概率的问题. 第一题数据范围较小,将串建成AC自动机以后,以A ...
- BZOJ:4816: [Sdoi2017]数字表格
4816: [Sdoi2017]数字表格 Time Limit: 50 Sec Memory Limit: 128 MBSubmit: 501 Solved: 222[Submit][Status ...
- BZOJ.4820.[SDOI2017]硬币游戏(思路 高斯消元 哈希/AC自动机/KMP)
BZOJ 洛谷 建出AC自动机,每个点向两个儿子连边,可以得到一张有向图.参照 [SDOI2012]走迷宫 可以得到一个\(Tarjan\)+高斯消元的\(O((nm)^3)\)的做法.(理论有\(6 ...
- BZOJ.4821.[SDOI2017]相关分析(线段树)
BZOJ LOJ 洛谷 恶心的拆式子..然后就是要维护\(\sum x_i,\ \sum y_i,\ \sum x_iy_i,\ \sum x_i^2\). 操作三可以看成初始化一遍,然后同操作二. ...
随机推荐
- VUE清除组件内部定时器
定时器如果不手动清除,只会在离开当前页面或者F5刷新后才会清除.由于vue项目是SPA应用,离开当前组件后并不会清除定时器,所以需要我们手动去清除定时器.但当我们将清除定时器clearInterval ...
- netty5源代码探索(一)----ByteBuf初探
Netty的各种简单介绍,总体架构就不介绍了,假设大家感觉的确须要,给我留言我再追加. 这里再推广一个自己做得netty+spring的集成方案,优化netty配置启动,并提供基础server搭建的配 ...
- 把node加入master节点时,日志内容分析
root@node1:~# kubeadm --token bggbum.mj3ogzhnm1wz07mj --discovery-token-ca-cert-hash sha256:8f02f833 ...
- luogu3379 【模板】最近公共祖先(LCA) 倍增法
题目大意:给定一棵有根多叉树,请求出指定两个点直接最近的公共祖先. 整体步骤:1.使两个点深度相同:2.使两个点相同. 这两个步骤都可用倍增法进行优化.定义每个节点的Elder[i]为该节点的2^k( ...
- Qt & opencv 学习(二)
例子:打开图片并显示.打开图片利用Qt的标准文件对话框,第一步是利用OpenCV创建窗口并显示. 添加一个Button,转到信号槽添加代码: using namespace cv; Mat image ...
- 文件读写&&内容替换
#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { ...
- ERROR: cannot start Android Studio. No JDK found. Please validate either ANDROID_STUDIO_JDK, JDK_HOME + Unrecognized VM option '+UseCodeCacheFlushing
想学下android,在本来想用myeclipse安装下sdk和adt,谁知在官网看到http://developer.android.com/sdk/index.html Google I/O 20 ...
- import data from excel to sql server
https://www.c-sharpcorner.com/article/how-to-import-excel-data-in-sql-server-2014/ 需要注意的是,第一次是选择sour ...
- for、while循环(java基础知识四)
1.循环结构概述和for语句的格式及其使用 * 什么是循环结构 循环语句可以在满足循环条件的情况下,反复执行某一段代码,这段被重复执行的代码被称为循环体语句,当反复执行这个循环体时,需要在合适的时候把 ...
- 软件GUI测试中的关注点
[摘要] 本文列数了软件黑盒测试过程中,在被测试软件中可能存在的常见软件问题.本文不会详细讨论基本的软件测试思想与常用技术,仅针对在软件黑盒测试过程中若干的问题做描述,并提供个人的参考测试意见与防范意 ...