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\). 操作三可以看成初始化一遍,然后同操作二. ...
随机推荐
- 李洪强经典面试案例33-如何面试 iOS 工程师
如何面试 iOS 工程师 推荐序 私下和很多朋友交流过这个话题,大部分求职者认为,我能做基本的 iOS 开发工作,就达到公司的要求了,殊不知公司招聘员工,更希望的是这个人能够在关键时候能够发挥一般 ...
- 【2】按照Django官网,创建一个web app 创建app/创建相应的数据库表
1. Creating app $ python manage.py startapp polls That'll create a directory polls, which is laid ou ...
- SequenceFileInputFormat区别TextInputFormat
通过InputFormat,Hadoop可以: l 检查MapReduce输入数据的正确性: l 将输入数据切分为逻辑块InputSplit,这些块会分配给Ma ...
- string和int互相转化
1 如何将字串 String 转换成整数 int? A. 有两个方法: 1). int i = Integer.parseInt([String]); 或 i = Integer.parseInt([ ...
- 一个UserState(WCF)的小例子
练习WCF的时候,遇到了一个异步调用(也许是)的问题.后来使用了重载参数UserState试着解决了一下,但不是很清楚这个参数的其他用途.现在贴出这个例子. Service部分: 客户端后台调用部分: ...
- 【腾讯bugly干货分享】精神哥手把手教你怎样智斗ANR
上帝说要有ANR,于是Bugly就有了ANR上报.那么ANR究竟是什么? 近期非常多童鞋问起精神哥ANR的问题,那么这次就来聊一下,鸡爪怎么泡才好吃.噢不,是怎样高速定位ANR. ANR是什么 简单说 ...
- iOS webView的常见属性和方法
一.初始化与三种加载方式 UIWebView继承与UIView,因此,其初始化方法和一般的view一样,通过alloc和init进行初始化,其加载数据的方式有三种: 第一种: - (void)load ...
- 深入浅出Oracle学习笔记:Buffer Cache 和Shared pool
Buffer cache 和 share pool 是sga中最重要最复杂的部分. 一.Buffer Cache 通常数据的读取.修改都是通过buffer cache 来完成的.buffer cach ...
- 2014山东省“浪潮杯”第五届ACM省赛总结
一次比赛做一次总结,弱菜又来总结了…… 我这种大四的又死皮赖来混省赛了,貌似就我和山大威海的某哥们(不详其大名)了吧.颁奖前和他聊天,得知他去百度了,真是不错,ORZ之. 比赛流水账: 题目目前不知道 ...
- hdu-5719 Arrange(组合数学)
题目链接: Arrange Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others) ...