额,其实就是裸的三模数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. 解决 C# .NET WebClient WebRequest请求缓慢的问题

    [编程环境]Visual Studio 2010, NET4.0 [开发语言]C#, 理论上VB.NET等依赖.NET Framework框架的语言均受此影响 [问题描述] 使用HttpWebRequ ...

  2. ubuntu-查看所有用户

    cat /etc/shadow :后面的全是用户

  3. 实现简单ORM案例

    ORM框架: • 我们希望设计一个可以实现对象和SQL自动映射的框架,但是整体用法和设计比Hibernate简单.砍掉不必要的功能.• 会穿插使用设计模式• 增加 – 将对象对应成sql语句,执行sq ...

  4. Post请求的两种编码格式:application/x-www-form-urlencoded和multipart/form-data

    在常见业务开发中,POST请求常常在这些地方使用:前端表单提交时.调用接口代码时和使用Postman测试接口时.我们下面来一一了解: 一.前端表单提交时 application/x-www-form- ...

  5. 1. Elasticsearch startup on local

    Download: https://www.elastic.co/downloads/elasticsearch 2. Setting: 1. [elasticsearch]\config\elast ...

  6. 金币(0)<P2015_1>

    金币 (coin.cpp/c/pas) [问题描述]  国王将金币作为工资,发放给忠诚的骑士.第一天,骑士收到一枚金币:之后两天(第二天和第三天),每天收到两枚金币:之后三天(第四.五.六天),每天收 ...

  7. VM player无法联网问题

    情况就是vmplayer不能联网,能联网的话右上角会显示Wired Connected的 在VM里面看了网络设置,是和主机共享IP(常用)没错.那问题就在PC上了,在win+r输入services.m ...

  8. 汇编语言从入门到精通-5微机CPU的指令系统1

    微机CPU的指令系统 5.1 汇编语言指令格式 为了介绍指令系统中指令的功能,先要清楚汇编语言是如何书写指令的,这就象在学习高级语言程序设计时,要清楚高级语言语句的语义.语法及其相关规定一样. 5.1 ...

  9. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 排版:设定引用右对齐

    <!DOCTYPE html> <html> <head> <title>菜鸟教程(runoob.com)</title> <meta ...

  10. Codeforces Round #588 (Div. 2)C(思维,暴力)

    #define HAVE_STRUCT_TIMESPEC#include<bits/stdc++.h>using namespace std;int a[27],b[27];int vis ...