额,其实就是裸的三模数NTT,上一篇已经说过了

哦,还有一个就是对乘起来炸long long的数取模,用long double之类的搞一下就好,精度什么的,,(看出题人心情??)

 #include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cstring>
#define LL long long
#define N 300005
using namespace std;
inline int ra()
{
int x=; char ch=getchar();
while (ch<'' || ch>'') ch=getchar();
while (ch>='' && ch<='') {x=x*+ch-''; ch=getchar();}
return x;
} const int mod=;
const int M[]={,,};
const int G[]={,,};
const LL _M=(LL)M[]*M[]; LL ksm(LL a, int b, int P)
{
LL sum=;
for (;b;b>>=,a=a*a%P)
if (b&) sum=sum*a%P;
return sum;
}
/*LL mul(LL a, LL b, LL p)
{
a%=p; b%=p;
return ((a*b-(LL)((LL)((long double)a/p*b+1e-3)*p))%p+p)%p;
}
const int m1=M[0],m2=M[1],m3=M[2];
const int inv1=ksm(m1%m2,m2-2,m2),inv2=ksm(m2%m1,m1-2,m1),inv12=ksm(_M%m3,m3-2,m3);
int CRT(int a1, int a2, int a3)
{
LL A=(mul((LL)a1*m2%_M,inv2,_M)+mul((LL)a2*m1%_M,inv1,_M))%_M;
LL k=((LL)a3+m3-A%m3)*inv12%m3;
return (k*(_M%mod)+A)%mod;
}*/ inline LL mul(LL a,LL b,LL p){
a%=p; b%=p;
return ((a*b-(LL)((LL)((long double)a/p*b+1e-)*p))%p+p)%p;
} const int m1=M[],m2=M[],m3=M[];
const int inv1=ksm(m1%m2,m2-,m2),inv2=ksm(m2%m1,m1-,m1),inv12=ksm(_M%m3,m3-,m3);
inline int CRT(int a1,int a2,int a3){
LL A=(mul((LL)a1*m2%_M,inv2,_M)+mul((LL)a2*m1%_M,inv1,_M))%_M;
LL k=((LL)a3+m3-A%m3)*inv12%m3;
return (k*(_M%mod)+A)%mod;
}
int rev[N];
struct NTT{
int num,P,G;
int w[][N];
void pre(int _P, int _G, int n)
{
num=n; P=_P; G=_G;
int g=ksm(G,(P-)/num,P);
w[][]=; for (int i=; i<n; i++) w[][i]=(LL)w[][i-]*g%P;
w[][]=; for (int i=; i<n; i++) w[][i]=w[][n-i];
}
void FFT(int *a, int n, int f)
{
for (int i=; i<n; i++) if (i<rev[i]) swap(a[i],a[rev[i]]);
for (int i=; i<n; i<<=)
for (int j=; j<n; j+=(i<<))
for (int k=; k<i; k++)
{
int x=a[j+k],y=(LL)w[f][num/(i<<)*k]*a[i+j+k]%P;
a[j+k]=(x+y)%P; a[i+j+k]=(x-y+P)%P;
}
if (!f) for (int i=,inv=ksm(n,P-,P); i<n; i++) a[i]=(LL)a[i]*inv%P;
}
}ntt[]; int n,m;
int ans[][N];
int a[N],b[N],c[N],d[N]; int main()
{
freopen("annona_squamosa.in","r",stdin); freopen("annona_squamosa.out","w",stdout);
n=ra();
for (int i=; i<n; i++) a[i]=ra();
for (int i=; i<n; i++) b[i]=ra();
for (m=; m<n<<; m<<=);
int L=,x=m>>; while (!(x&)) x>>=,L++;
for (int i=; i<m; i++) rev[i]=(rev[i>>]>>)|((i&)<<L);
// for (m=1;m<=2*(n-1);m<<=1);
// int L=0,x=m; while (x>>=1) L++;
// for (int i=1;i<=m;i++) rev[i]=(rev[i>>1]>>1)|((i&1)<<(L-1));
// for (int i=0; i<m; i++) printf("%d ",rev[i]); cout<<endl;
for (int i=; i<; i++) ntt[i].pre(M[i],G[i],m);
for (int i=; i<; i++)
{
memcpy(c,a,sizeof(int)*(m+)); memcpy(d,b,sizeof(int)*(m+));
ntt[i].FFT(c,m,); ntt[i].FFT(d,m,);
for (int j=; j<m; j++) c[j]=(LL)c[j]*d[j]%ntt[i].P;
ntt[i].FFT(c,m,);
for (int j=; j<m; j++) ans[i][j]=c[j];
}
for (int i=; i<n; i++) printf("%d ",CRT(ans[][i],ans[][i],ans[][i]));
return ;
}

COGS 2294. [HZOI 2015] 释迦的更多相关文章

  1. COGS 2580. [HZOI 2015]偏序 II

    COGS 2580. [HZOI 2015]偏序 II 题目传送门 题目大意:给n个元素,每个元素有具有4个属性a,b,c,d,求i<j并且ai<aj,bi<bj,ci<cj, ...

  2. cogs 2123. [HZOI 2015] Glass Beads

    2123. [HZOI 2015] Glass Beads ★★★   输入文件:MinRepresentations.in   输出文件:MinRepresentations.out   简单对比时 ...

  3. cogs 2320. [HZOI 2015]聪聪的世界题解

    2320. [HZOI 2015]聪聪的世界 时间限制:6 s   内存限制:512 MB [题目描述] 背景: 聪聪的性取向有问题. 题目描述: 聪聪遇到了一个难题: 给出一个序列a1…an,完成以 ...

  4. COGS 2188. [HZOI 2015] Math 题解

      题目描述: 给定n个数X1-Xn,求下面式子的值(整数部分): n<=107,xi<=109且互不相同. 分析: 其实一开始看见这道题我也吓傻了,k这么大,再说我又是数论鶸渣,打死也不 ...

  5. [COGS 2287][HZOI 2015]疯狂的机器人

    Description 题库链接 现在在二维平面内原点上有一只机器人,他每次可以选择向右走,向左走,向下走,向上走和不走(每次如果走只能走一格).机器人不能走到横坐标是负数或者纵坐标是负数的点上. 给 ...

  6. [COGS 2258][HZOI 2015]复仇的序幕曲

    Description 你还梦不梦痛不痛,回忆这么重你怎么背得动 ----序言 当年的战火硝烟已经渐渐远去,可仇恨却在阿凯蒂王子的心中越来越深 他的叔父三年前谋权篡位,逼宫杀死了他的父王,用铁血手腕平 ...

  7. cogs 2355. [HZOI 2015] 有标号的DAG计数 II

    题目分析 来自2013年王迪的论文<浅谈容斥原理> 设\(f_{n,S}\)表示n个节点,入度为0的点集恰好为S的方案数. 设\(g_{n,S}\)表示n个节点,入度为0的点集至少为S的方 ...

  8. COGS 2280. [HZOI 2015]树白黑

    ★★   输入文件:B_Tree.in   输出文件:B_Tree.out   简单对比时间限制:2 s   内存限制:512 MB [题目描述] 给定一棵有根树,树根为1,一开始这棵树所有节点均为白 ...

  9. 【COGS】2287:[HZOI 2015]疯狂的机器人 FFT+卡特兰数+排列组合

    [题意][COGS 2287][HZOI 2015]疯狂的机器人 [算法]FFT+卡特兰数+排列组合 [题解]先考虑一维的情况,支持+1和-1,前缀和不能为负数,就是卡特兰数的形式. 设C(n)表示第 ...

随机推荐

  1. ThinkPHP的介绍和安装

    8月6号开始学ThinkPHP了,看的是赵桐正老师的视频,.以及要去看了5集,初步感觉此框架还不错,就是要记忆哪些函数的用法感觉不太好.无论如何,既然要学了,就要遵从这个.在此,将学习时的一些笔记贴上 ...

  2. python opencv:绘图 基本图形

    参数说明 • img:你想要绘制图形的那幅图像. • color:形状的颜色.以 RGB 为例,需要传入一个元组,例如:( 255,0,0)代表蓝色.对于灰度图只需要传入灰度值. • thicknes ...

  3. cf--TV Subscriptions (Hard Version)

    time limit per test:2 seconds memory limit per test:256 megabytes input:standard input output:standa ...

  4. NAT-T和PAT(IPSec)

    ¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥NAT-T技术介绍¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥ 为什么TCP和UDP不能穿越:TCP和UDP有一个IP头的尾部校验(校验头部和负载 ...

  5. hive内表和外表的创建、载入数据、区别

    创建表 创建内表 create table customer( customerId int, firstName string, lastName STRING, birstDay timestam ...

  6. 利用 Jenkins 持续集成 iOS 项目,搭建自动化打包环境

    ---恢复内容开始--- jenkins是一个广泛用于持续构建的可视化web工具,持续构建即各种项目的”自动化”编译.打包.分发部署.jenkins可以很好的支持各种语言(比如:Java, c#, P ...

  7. iOS 开发之 RunLoop 详解

    1)什么是 Runloop ? 1.字面上是运行循环,内部就是 do-while 循环,在这个循环内不断地处理各种任务. 2.一个线程对应一个 Runloop ,主线程的 RunLoop 默认是开启的 ...

  8. git分支在项目中管理

    实际项目中如何使用Git做分支管理 2018年06月24日 18:08:24 ShuSheng007 阅读数:9241   版权声明: https://blog.csdn.net/ShuSheng00 ...

  9. MyBatis映射器(转载)

    什么是MyBatis映射器? MyBatis框架包括两种类型的XML文件,一类是配置文件,即mybatis-config.xml,另外一类是映射文件,例如XXXMapper.xml等.在MyBatis ...

  10. ElementUI 删除 el-table 当前选中行(不是selection列)

    一句话即可: this.表格绑定的data.splice(this.$refs.表格的ref.store.states.selection, 1)