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)表示第 ...
随机推荐
- C:char类型
char字符类型 字符型变量用于存储一个单一字符,在 C 语言中用 char 表示,其中每个字符变量都会占用 1 个字节.在给字符型变量赋值时,需要用一对英文半角格式的单引号(' ')把字符括起来. ...
- 找到第N个字符
找到第N个字符 小黑黑上课的时候走神儿,鬼使神差的就想到了这么一个问题,假如: S1=a S2=ab S3=abc S4=abcd S26=abcdefghijklmnopqrstuvwxy ...
- Java面向对象编程 -2
成员属性封装 在类之中的组成就是属性和方法,一般而言方法都是对外提供服务的,所以是不会进行封装处理的,而对于属性需要较高的安全性,所以往往需要对其进行保护 这个时候就需要采用封装性对属性进行保护. 在 ...
- SpringMvc 项目配置
spring-mvc.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=&quo ...
- VS release模式下进行调试设置
工程项目上右键 打开 属性界面 1.c++ --- 常规 ---- 调试信息格式 选 程序数据库(/Zi)或(/ZI), 注意:如果是库的话,只能(Zi) 2.c/c++ ---- 优化 ---- ...
- jsp格式化日期
1.先引入JSTL库 <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%> ...
- Python 中的类与对象 初认识
一:类的声明 1类的关键字: 从第一天第一个项目起我们就接触过关键字,比如False True is not None return for while elif else import等等,这是语言 ...
- 「题解」「美团 CodeM 资格赛」跳格子
目录 「题解」「美团 CodeM 资格赛」跳格子 题目描述 考场思路 思路分析及正解代码 「题解」「美团 CodeM 资格赛」跳格子 今天真的考自闭了... \(T1\) 花了 \(2h\) 都没有搞 ...
- C语言的变量存储方式和生存期
2020.2.28日,封城一个多月了,紧邻毕业期,我在家抽空学习一下C. 看到了变量的存储方式和生存期这一章节,下面就是我整理的内容 下面是用于理解静态局部变量这个概念所写的代码,主要是需要分析一下函 ...
- SQL SERVER 2005还原差异备份、日志备份 2012-03-29 11:43
其实要备份,还原最安全最有保障的是完全备份.但是完全备份肯定是需要更多的磁盘空间的开销.尤其是数据量比较大的.比如基数是500M,每天的增长量为10M,那么第一次完全备份是500M,第二次是510M, ...