省队集训day6 A



code:
#include<cstdio>
#include<iostream>
#include<cmath>
#include<cstring>
#include<algorithm>
#define maxn 262146
#define mod 950009857
#define g 7
using namespace std;
typedef long long int64;
char ch;
int n,m,k,x,N,len,rev[maxn];
int64 a[maxn],b[maxn],c[maxn],wwn[][maxn],wn,w,t1,t2;
bool ok;
void read(int &x){
for (ok=,ch=getchar();!isdigit(ch);ch=getchar()) if (ch=='-') ok=;
for (x=;isdigit(ch);x=x*+ch-'',ch=getchar());
if (ok) x=-x;
}
void read(int64 &x){
for (ok=,ch=getchar();!isdigit(ch);ch=getchar()) if (ch=='-') ok=;
for (x=;isdigit(ch);x=x*+ch-'',ch=getchar());
if (ok) x=-x;
}
int re(int v){
int t=;
for (int i=;i<len;i++) t<<=,t|=v&,v>>=;
return t;
}
int64 ksm(int64 a,int64 b){
int64 t=;
for (;b;b>>=){if (b&) t=t*a%mod; a=a*a%mod;}
return t;
}
void ntt(int64 *a,int op){
for (int i=;i<N;i++) if (i<rev[i]) swap(a[i],a[rev[i]]);
for (int s=;s<=N;s<<=){
wn=wwn[op][s];
for (int i=;i<N;i+=s){
w=;
for (int j=i;j<i+(s>>);j++,w=w*wn%mod){
t1=a[j],t2=w*a[j+(s>>)]%mod;
a[j]=(t1+t2)%mod,a[j+(s>>)]=((t1-t2)%mod+mod)%mod;
}
}
}
if (op==){
int64 x=ksm(N,mod-);
for (int i=;i<N;i++) a[i]=a[i]*x%mod;
}
}
int main(){
read(n),read(m),read(k),N=;
for (int i=;i<n;i++) read(a[i]);
for (int i=;i<=m;i++) read(x),b[x]++;
while (N<(n<<)) len++,N<<=;
for (int i=;i<N;i++) rev[i]=re(i);
for (int i=;i<=len;i++) wwn[][<<i]=ksm(g,(mod-)/(<<i));
for (int i=;i<=len;i++) wwn[][<<i]=ksm(wwn[][<<i],mod-);
for (;k;k>>=){
ntt(b,);
if (k&){
ntt(a,);
for (int i=;i<N;i++) a[i]=a[i]*b[i]%mod;
ntt(a,);
for (int i=n;i<N;i++) a[i]=;
}
for (int i=;i<N;i++) b[i]=b[i]*b[i]%mod;
ntt(b,);
for (int i=n;i<N;i++) b[i]=;
}
for (int i=;i<n;i++) printf("%lld ",a[i]);
puts("");
return ;
}
省队集训day6 A的更多相关文章
- 省队集训day6 C
Description 给定平面上的 N 个点, 其中有一些是红的, 其他是蓝的.现在让你找两条平行的直线, 使得在保证 不存在一个蓝色的点 被夹在两条平行线之间,不经过任何一个点, 不管是蓝色 ...
- 省队集训day6 B
一道AC自动机题···· 一定要把一个节点没有的儿子接到它fai的儿子,否则会卡到n^2的······· #include<cstdio> #include<iostream> ...
- 省队集训 Day6 序列
[题目大意] 给出$n$个数的序列$a_1, a_2, ..., a_n$,有$m$次操作,为下面三种: $A~l~r~d$:区间$[l,r]$,全部加$d$. $M~l~r~d$:区间$[l,r]$ ...
- HN2018省队集训
HN2018省队集训 Day1 今天的题目来自于雅礼的高二学长\(dy0607\). 压缩包下载 密码: 27n7 流水账 震惊!穿着该校校服竟然在四大名校畅通无阻?霸主地位已定? \(7:10\)从 ...
- JS省队集训记
不知不觉省队集训已经结束,离noi也越来越近了呢 论考前实战训练的重要性,让我随便总结一下这几天的考试 Day 1 T1 唉,感觉跟xj测试很像啊?meet in middle,不过这种题不多测是什么 ...
- LOJ #6074. 「2017 山东一轮集训 Day6」子序列
#6074. 「2017 山东一轮集训 Day6」子序列 链接 分析: 首先设f[i][j]为到第i个点,结尾字符是j的方案数,这个j一定是从i往前走,第一个出现的j,因为这个j可以代替掉前面所有j. ...
- [2018HN省队集训D9T1] circle
[2018HN省队集训D9T1] circle 题意 给定一个 \(n\) 个点的竞赛图并在其中钦定了 \(k\) 个点, 数据保证删去钦定的 \(k\) 个点后这个图没有环. 问在不删去钦定的这 \ ...
- [2018HN省队集训D8T1] 杀毒软件
[2018HN省队集训D8T1] 杀毒软件 题意 给定一个 \(m\) 个01串的字典以及一个长度为 \(n\) 的 01? 序列. 对这个序列进行 \(q\) 次操作, 修改某个位置的字符情况以及查 ...
- [2018HN省队集训D8T3] 水果拼盘
[2018HN省队集训D8T3] 水果拼盘 题意 给定 \(n\) 个集合, 每个集合包含 \([1,m]\) 中的一些整数, 在这些集合中随机选取 \(k\) 个集合, 求这 \(k\) 个集合的并 ...
随机推荐
- First Record
今天我在博客园安家了! R Python Scala hadoop Spark MachineLearning
- python多线程机制
Python中的线程从一开始就是操作系统的原生线程.而Python虚拟机也同样使用一个全局解释器锁(Global Interpreter Lock,GIL)来互斥线程多Python虚拟机的使用. GI ...
- Timeout for tests
如果想把timeout太久的测试自动标记为失败,有两种方法: 1.在 @Test里加上 Timeout 参数 定义"timeout=1000“的话,如果超过1000 毫秒,failure会被 ...
- poj2007
极角排序,其实是叉乘排序 #include <iostream> #include <algorithm> #include <math.h> #include & ...
- android编程中setLayoutParams方法设置
第一篇 private LinearLayout generateHeadOfControl() { LinearLayout LayoutHead = createLayout(LinearLayo ...
- 1.1GTK+ 的简单程序HelloWorld
1.1GTK+ 的简单程序HelloWorld 编译执行如图所看到的:
- Sea.js提供简单、极致的模块化开发体验
为什么使用 Sea.js ? Sea.js 追求简单.自然的代码书写和组织方式,具有以下核心特性: 简单友好的模块定义规范:Sea.js 遵循 CMD 规范,可以像 Node.js 一般书写模块代码. ...
- 用PHP迭代器来实现一个斐波纳契数列(转)
斐波纳契数列通常做法是用递归实现,当然还有其它的方法.这里现学现卖,用PHP的迭代器来实现一个斐波纳契数列,几乎没有什么难度,只是把类里的next()方法重写了一次.注释已经写到代码中,也是相当好理解 ...
- rsyslog 报 WARNING: rsyslogd is running in compatibility mode.
[root@localhost log]# uname -a Linux localhost.localdomain 2.6.32 #1 SMP Sun Sep 20 18:58:21 PDT 2 ...
- Python之路,Day21 - 常用算法学习
Python之路,Day21 - 常用算法学习 本节内容 算法定义 时间复杂度 空间复杂度 常用算法实例 1.算法定义 算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的 ...