COGS 2294. [HZOI 2015] 释迦
额,其实就是裸的三模数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] 释迦的更多相关文章
- COGS 2580. [HZOI 2015]偏序 II
COGS 2580. [HZOI 2015]偏序 II 题目传送门 题目大意:给n个元素,每个元素有具有4个属性a,b,c,d,求i<j并且ai<aj,bi<bj,ci<cj, ...
- cogs 2123. [HZOI 2015] Glass Beads
2123. [HZOI 2015] Glass Beads ★★★ 输入文件:MinRepresentations.in 输出文件:MinRepresentations.out 简单对比时 ...
- cogs 2320. [HZOI 2015]聪聪的世界题解
2320. [HZOI 2015]聪聪的世界 时间限制:6 s 内存限制:512 MB [题目描述] 背景: 聪聪的性取向有问题. 题目描述: 聪聪遇到了一个难题: 给出一个序列a1…an,完成以 ...
- COGS 2188. [HZOI 2015] Math 题解
题目描述: 给定n个数X1-Xn,求下面式子的值(整数部分): n<=107,xi<=109且互不相同. 分析: 其实一开始看见这道题我也吓傻了,k这么大,再说我又是数论鶸渣,打死也不 ...
- [COGS 2287][HZOI 2015]疯狂的机器人
Description 题库链接 现在在二维平面内原点上有一只机器人,他每次可以选择向右走,向左走,向下走,向上走和不走(每次如果走只能走一格).机器人不能走到横坐标是负数或者纵坐标是负数的点上. 给 ...
- [COGS 2258][HZOI 2015]复仇的序幕曲
Description 你还梦不梦痛不痛,回忆这么重你怎么背得动 ----序言 当年的战火硝烟已经渐渐远去,可仇恨却在阿凯蒂王子的心中越来越深 他的叔父三年前谋权篡位,逼宫杀死了他的父王,用铁血手腕平 ...
- cogs 2355. [HZOI 2015] 有标号的DAG计数 II
题目分析 来自2013年王迪的论文<浅谈容斥原理> 设\(f_{n,S}\)表示n个节点,入度为0的点集恰好为S的方案数. 设\(g_{n,S}\)表示n个节点,入度为0的点集至少为S的方 ...
- COGS 2280. [HZOI 2015]树白黑
★★ 输入文件:B_Tree.in 输出文件:B_Tree.out 简单对比时间限制:2 s 内存限制:512 MB [题目描述] 给定一棵有根树,树根为1,一开始这棵树所有节点均为白 ...
- 【COGS】2287:[HZOI 2015]疯狂的机器人 FFT+卡特兰数+排列组合
[题意][COGS 2287][HZOI 2015]疯狂的机器人 [算法]FFT+卡特兰数+排列组合 [题解]先考虑一维的情况,支持+1和-1,前缀和不能为负数,就是卡特兰数的形式. 设C(n)表示第 ...
随机推荐
- Steam 游戏 《Crashlands(崩溃大陆)》修改器制作-[先使用CE写,之后有时间的话改用CheatMaker](2020年寒假小目标12)
日期:2020.02.15 博客期:155 星期六 [温馨提示]: 只是想要修改器的网友,可以直接点击此链接下载: 只是想拿CT文件的网友,可以直接点击此链接下载: 没有博客园账号的网友,可以将页面下 ...
- EasyUI tree的三种选中状态
EasyUI中tree有三种选中状态,分别是checked(选中).unchecked(未选中).indeterminate(部分选中). 其中indeterminate状态比较特殊,主要表示只有部分 ...
- ZOJ1008 Gnome Tetravex
DFS+剪枝~ #include<bits/stdc++.h> using namespace std; ][]; int N; int cnt; ]; ]; unordered_map& ...
- 【转】django 三件套(render,redirect,HttpResponse)
Django基础必备三件套**: HttpResponse 内部传入一个字符串参数,返回给浏览器. from django.shortcuts import HttpResponse def inde ...
- mysql 官方读写分离方案
mysql 8.0 集群模式下的自动读写分离方案 问题 多主模式下的组复制,看起来挺好,起始问题和限制很多.而且中断一个复制就无法配置了 多主模式下,innodbcluster 等于是无用的,不需要自 ...
- zookeeper 启动和停止脚本
启动 sh zkServer.sh start 停止脚本 sh zkServer.sh stop
- HackInOS靶机渗透
一.环境配置 攻击机kali搭建在Vmware,桥接模式,ip:192.168.43.48 靶机HackInOS需要用VirtualBox导入ova文件,桥接模式,启动完成之后, 选择Ubuntu系统 ...
- 「HAOI2011」Problem c
「HAOI2011」Problem c 传送门 由于这道题本人讲得不好,可以参考这位dalao的博客 我可就直接上代码了... 参考代码: /*---------------------------- ...
- 吴裕雄--天生自然ORACLE数据库学习笔记:Oracle 11g的闪回技术
alter system set db_recovery_file_dest_size=4g scope=both; connect system/1qaz2wsx as sysdba; archiv ...
- 【转】Python中*args和**kwargs的区别
一.*args的使用方法 *args 用来将参数打包成tuple给函数体调用 例子一: 输出结果以元组的形式展示 def function(*args): print(args, type(args) ...