卡得一手好常数。。学习了。。(似乎只对FFT有效)

JZOJ 4349

 #include <bits/stdc++.h>
#define LL long long
#define DB long double
using namespace std;
const int mo=;
const DB pi=acos(-);
int K,T,p[],q[],f[],n,m,k,a[],rev[],ans;
DB COS[],SIN[],Cos[],Sin[];
struct cp{
DB x,y;
cp (DB p=,DB q=){x=p,y=q;}
}w[],N[];
cp operator+(cp a,cp b){
return cp(a.x+b.x,a.y+b.y);
}
cp operator-(cp a,cp b){
return cp(a.x-b.x,a.y-b.y);
}
cp operator*(cp a,cp b){
return cp(a.x*b.x-a.y*b.y,a.x*b.y+a.y*b.x);
}
LL po(LL x,int y){
LL z=;
for (;y;y>>=,x=x*x%mo)
if (y&) z=z*x%mo;
return z;
}
LL C(int n,int m){
return n<m?:(n<mo?1ll*p[n]*q[m]%mo*q[n-m]%mo:C(n%mo,m%mo)*C(n/mo,m/mo)%mo);
}
void fft(cp a[],int n,int d=){
for (int i=;i<n;++i) if (i<rev[i]) swap(a[i],a[rev[i]]);
for (int m=,k=;m<=n;k=m,m<<=){
cp wn;
wn=d>?cp(COS[m],SIN[m]):cp(Cos[m],Sin[m]);
N[]=cp(,);
for (int i=;i<k;++i) N[i]=N[i-]*wn;
for (int i=;i<n;i+=m)
for (int j=i;j<i+k;++j){
cp u=a[j],v=a[j+k]*N[j-i];
a[j]=u+v; a[j+k]=u-v;
}
}
if (d==-) for (int i=;i<=n;++i) a[i].x/=n;
}
void preF(){
f[]=; f[]=; f[]=;
int t=,X=,Y=<<t;
for (int i=;i<=;++i){
int x=,y=;
for (int j=;j<=;++j,x*=)
(f[i]+=(C(,j)*x*(Y-X+y)%mo))%=mo,(y+=C(t,i-j-))%=mo;
f[i]=(f[i]%mo+mo)%mo;
for (int j=;j<=;++j)
X=(X*-C(t,i-))%mo,++t;
X=(X+C(t,i))%mo; Y=Y*%mo;
}
}
int main(){
for (int i=;i<=;i<<=)
COS[i]=cos(pi*/i),Cos[i]=cos(pi*-/i),
SIN[i]=sin(pi*/i),Sin[i]=sin(pi*-/i);
scanf("%d",&T);
p[]=q[]=;
for (int i=,x;i<mo;++i){
for (x=i;x%mo==;x/=mo);
p[i]=1ll*p[i-]*x%mo;
}
q[mo-]=po(p[mo-],mo-);
for (int i=mo-,x;i;--i){
for (x=i+;x%mo==;x/=mo);
q[i]=1ll*q[i+]*x%mo;
}
preF();
while (T--){
scanf("%d%d",&n,&K);
for (int i=;i<=n;++i) a[i]=f[i];
for (m=;m<n;m<<=);
for (int i=n+;i<=m;++i) a[i]=; n=m;
for (m=,k=;m<=n;k=m,m<<=){
for (int i=;i<m;++i) rev[i]=rev[i>>]>>|(i&)*(m>>);
for (int i=;i<=n;i+=m){
w[]=cp(,);
for (int j=i;j<i+k;++j) w[j-i+]=cp(a[j]+a[j+k],a[j]-a[j+k]);
for (int j=k+;j<m;++j) w[j]=cp(,);
fft(w,m);
for (int j=;j<m;++j) w[j]=w[j]*w[j];
fft(w,m,-);
for (int j=i;j<i+m-;++j) a[j]=(LL)round(w[j-i+].x/)%mo;
a[i+m-]=(LL)round(w[].x/-)%mo;
}
}
ans=;
for (int i=K;i<=n;++i) (ans+=a[i])%=mo;
printf("%d\n",(ans%mo+mo)%mo);
}
return ;
}

DAISHI

FFT的常数优化的更多相关文章

  1. FFT常数优化(共轭优化)

    最近闲着无聊研究了下\(FFT\)的常数优化,大概就是各种\(3\)次变\(2or1.5\)次之类的,不过没见过啥题卡这个的吧. 关于\(FFT\)可以看这里:浅谈FFT&NTT. 关于复数 ...

  2. spoj 4487. Can you answer these queries VI (gss6) splay 常数优化

    4487. Can you answer these queries VI Problem code: GSS6 Given a sequence A of N (N <= 100000) in ...

  3. 【DSA MOOC】起泡排序的原理及常数优化

    根据学堂在线TsinghuaX: 30240184X 数据结构(2015秋)这门课的内容,对bubblesort做了一些总结. 1. bubblesort(起泡排序),原理来自这样一个观察规律:若序列 ...

  4. 【分块】【常数优化】【Orz faebdc】洛谷 P1083 NOIP2012提高组 借教室

    分块90分. By AutSky_JadeK [重点在下面] #include<cstdio> #include<cmath> using namespace std; #de ...

  5. OI常用的常数优化小技巧

    注意:本文所介绍的优化并不是算法上的优化,那个就非常复杂了,不同题目有不同的优化.笔者要说的只是一些实用的常数优化小技巧,很简单,虽然效果可能不那么明显,但在对时间复杂度要求十分苛刻的时候,这些小的优 ...

  6. 拆系数FFT及其部分优化

    模拟考某题一开始由于校内OJ太慢直接拆系数FFT跑不过 后来被神仙婊了一顿之后发现复杂度写炸了改了改随便过 模版题:任意模数NTT 三模数NTT 常数巨大,跑的极慢 拆系数FFT 原理是对于两个多项式 ...

  7. 一些技巧 && 常数优化 && 出现の错误

    开坑原因 7.21 今天DTZ大爷教了我一个算欧拉函数的好方法......是质因数复杂度的 这让我想到,这些小技巧小idea,很多时候,可能就是考场上最致命.最一击必杀的"大招" ...

  8. bzoj 3240: [Noi2013]矩阵游戏 矩阵乘法+十进制快速幂+常数优化

    3240: [Noi2013]矩阵游戏 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 613  Solved: 256[Submit][Status] ...

  9. 关于OI中简单的常数优化

    有些东西借鉴了这里qwq 1.IO(istream/ostream) 输入输出优化 之后能,在赛场上常见的几种输入输出: 输入: $1.cin$ 呵呵,不说什么了,慢的要死.大概$1e8$个数要读1分 ...

随机推荐

  1. Dubbo zookeeper 初探

    先把zookeeper在本地给安装好, 安装方法参考:http://blog.csdn.net/wxwzy738/article/details/16330253 这里的话讲述了两个工程一个工程是提供 ...

  2. 利用反射和泛型把Model对象按行储存进数据库以及按行取出然后转换成Model 类实例 MVC网站通用配置项管理

    利用反射和泛型把Model对象按行储存进数据库以及按行取出然后转换成Model 类实例 MVC网站通用配置项管理   2018-3-10 15:18 | 发布:Admin | 分类:代码库 | 评论: ...

  3. 自己定义UITextField

    目的是实现例如以下的效果: UITextField的leftView是自己定义的UIView,当中: 1.包括一个居中显示的icon.而且上,左,下各有1px的间隙 2.左上和左下是圆角,右边没有圆角 ...

  4. 【程序猿联盟】官网上线啦!coderunity.com

    wx_fmt=jpeg" alt="" style="max-width:100%; height:auto!important"> 内容简单介 ...

  5. CUGBACM_Summer_Tranning1 二进制枚举+模拟+离散化

    整体感觉:这个组队赛收获还挺多的.自从期末考试以后已经有一个多月没有 做过组队赛了吧,可是这暑假第一次组队赛就找回了曾经的感觉.还挺不错的!继续努力!! 改进的地方:这次组队赛開始的时候题目比較难读懂 ...

  6. 横向卷轴(side-scrolling)地图的canvas实现

    标题有点小题大作了,实际上是实现一张看起来连续的运动背景图片. 效果如下:   // 实现原理: 图片1与图片2是两张首尾衔接的图片,图片1以一定速度移出canvas,图片2慢慢移进canvas,当图 ...

  7. 【TensorFlow-windows】(五) CNN(卷积神经网络)对cifar10的识别

    主要内容: 1.基于CNN的cifar10识别(详细代码注释) 2.该实现中的函数总结 平台: 1.windows 10 64位 2.Anaconda3-4.2.0-Windows-x86_64.ex ...

  8. PHP中的面向对象 中的类(class)

    2.11 上午讲的是面向对象中的类(class),一个非常抽象的概念, 类里面成员的定义有 public$abc; private$abc(私有变量): protect $abc(受保护的变量): 下 ...

  9. android打包签名,从生成keystore到完成签名

    输入指令并获得结果:(对应自己的java安装目录) 首先,我们需要一个keystore,当然已经有了的话就不用这一步了:cmd下:进入到jdk的bin目录,这样的话,android.keystore文 ...

  10. FireMonkey下的WndProc实现

    unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Types, System.UI ...