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\). 操作三可以看成初始化一遍,然后同操作二. ...
随机推荐
- (转)使用MAT比较多个heap dump文件
使用MAT比较多个heap dump文件 调试内存泄露时,有时候适时比较2个或多个heap dump文件是很有用的.这时需要生成多个单独的HPROF文件. 下面是一些关于如何在MAT里比较多个heap ...
- android keyEvent
http://developer.android.com/reference/android/view/KeyEvent.html
- C语言的一些特殊使用方法————————【Badboy】
一:特殊的字符串宏 [cpp] #define A(x) T_##x #define B(x) #@x #define C(x) #x 我们如果x=1, 则上面的宏定义会被解释成下面的样子 A(1)- ...
- vc6.0的一些快捷键
1.检测程序中的括号是否匹配 把光标移动到需要检测的括号(如大括号{}.方括号[].圆括号()和尖括号<>)前面,键入快捷键“Ctrl+]”.如果括号匹配正确,光标就跳到匹配的括号处 ...
- TreeSet实现Comparator接口的排序算法的分析
为了方便,用lambda表达式代替comparator接口 例子如下: public static void main(String[] args) { TreeSet<Integer> ...
- HBase协处理器同步二级索引到Solr(续)
一. 已知的问题和不足二.解决思路三.代码3.1 读取config文件内容3.2 封装SolrServer的获取方式3.3 编写提交数据到Solr的代码3.4 拦截HBase的Put和Delete操作 ...
- Bootstrap progress-bar
1.进度条 在网页中,进度条的效果并不少见,比如一个评分系统,比如加载状态等.就如下图所示的一个评分系统,他就是一个简单的进度条效果: 进度条和其他独立组件一样,开发者可以根据自己的需要,选择对应的版 ...
- 关于animate的一些属性
animate() 方法执行 CSS 属性集的自定义动画.该方法通过CSS样式将元素从一个状态改变为另一个状态.CSS属性值是逐渐改变的,这样就可以创建动画效果.只有数字值可创建动画(比如 " ...
- codeforces 440C. One-Based Arithmetic 解题报告
题目链接:http://codeforces.com/problemset/problem/440/C 题目意思:给出一个数你,问需要用到的1来组成这个数的最少数量是多少. 我一开始对每个数只从 “+ ...
- codeforces 414A A. Mashmokh and Numbers(素数筛)
题目链接: A. Mashmokh and Numbers time limit per test 1 second memory limit per test 256 megabytes input ...