大意: 给定序列$a$, 给定$m$个操作, 求最后序列每一项的值.

一共$3$种操作, 其中第$k$种操作将序列变为$b_i=\sum\limits_{j=i-kx}a_j$, $(0\le x,1\le j\le i\le n)$

可以发现$\sum b_ix^i=(\sum a_i x^i)(\sum x^{ki})$, 转化为求$(\sum x^{ki})^{cnt}$

直接快速幂会$T$, 注意到$(\sum x^{ki})^n=\sum\binom{n-1+i}{i}x^{ki}$, 所以可以只求一次卷积

#include <iostream>
#include <cstdio>
#define REP(i,a,n) for(int i=a;i<=n;++i)
#define PER(i,a,n) for(int i=n;i>=a;--i)
using namespace std;
typedef long long ll;
typedef int* poly;
const int N = 2e6+10, P = 998244353, G = 3, Gi = 332748118;
ll qpow(ll a,ll n) {ll r=1%P;for (a%=P;n;a=a*a%P,n>>=1)if(n&1)r=r*a%P;return r;}
int n,m,lim,l,A[N],B[N],R[N];
int fac[N],ifac[N];
void init(int n) {
for (lim=1,l=0; lim<=n; lim<<=1,++l) ;
REP(i,0,lim-1) R[i]=(R[i>>1]>>1)|((i&1)<<(l-1));
}
void NTT(poly J, int tp=1) {
REP(i,0,lim-1) if (i<R[i]) swap(J[i],J[R[i]]);
for (int j=1; j<lim; j<<=1) {
ll T = qpow(tp==1?G:Gi,(P-1)/(j<<1));
for (int k=0; k<lim; k+=j<<1) {
ll t = 1;
for (int l=0; l<j; ++l,t=t*T%P) {
int y = t*J[k+j+l]%P;
J[k+j+l] = (J[k+l]-y+P)%P;
J[k+l] = (J[k+l]+y)%P;
}
}
}
if (tp==-1) {
ll inv = qpow(lim, P-2);
REP(i,0,lim-1) J[i]=(ll)inv*J[i]%P;
}
}
poly mul(poly a, poly b) {
init(n*2);
REP(i,0,lim-1) A[i]=B[i]=0;
REP(i,0,n-1) A[i]=a[i];
REP(i,0,n-1) B[i]=b[i];
NTT(A),NTT(B);
poly c(new int[lim]);
REP(i,0,lim-1) c[i]=(ll)A[i]*B[i]%P;
NTT(c,-1);
REP(i,0,lim-1) if (c[i]<0) c[i]+=P;
return c;
} int C(int n, int m) {
if (n<m) return 0;
return (ll)fac[n]*ifac[m]%P*ifac[n-m]%P;
} int main() {
fac[0]=ifac[0]=1;
REP(i,1,N-1) fac[i]=(ll)fac[i-1]*i%P;
ifac[N-1]=qpow(fac[N-1],P-2);
PER(i,1,N-2) ifac[i]=(ll)ifac[i+1]*(i+1)%P;
int t;
scanf("%d", &t);
while (t--) {
scanf("%d%d", &n, &m);
poly a(new int[n]);
REP(i,0,n-1) scanf("%d", a+i);
int cnt[4]{};
REP(i,1,m) {
int c;
scanf("%d", &c);
++cnt[c];
}
REP(i,1,3) if (cnt[i]) {
poly f(new int[n]());
for (int j=0;j*i<n;++j) {
f[j*i] = C(cnt[i]-1+j,j);
}
a = mul(a,f);
}
ll ans = 0;
REP(i,0,n-1) ans ^= (i+1ll)*a[i];
printf("%lld\n", ans);
}
}

2019杭电多校一 L. Sequence (NTT)的更多相关文章

  1. 2019杭电多校二 L. Longest Subarray (线段树)

    大意: 给定序列$a$, 元素范围$[1,C]$, 求一个最长子序列, 满足每个元素要么不出现, 要么出现次数$\le K$. 枚举右端点, 考虑左端点合法的位置. 显然一定是$C$种颜色合法位置的交 ...

  2. 2018 杭电多校1 - Chiaki Sequence Revisited

    题目链接 Problem Description Chiaki is interested in an infinite sequence $$$a_1,a_2,a_3,...,$$$ which i ...

  3. 2019杭电多校第一场hdu6581 Vacation

    Vacation 题目传送门 update(O(n)) 看了那个O(n)的方法,感觉自己想的那个O(nlogn)的好傻,awsl. 0车最终通过停车线的时候,状态一定是某个车堵住后面的所有车(这个车也 ...

  4. 2019杭电多校第二场hdu6601 Keen On Everything But Triangle

    Keen On Everything But Triangle 题目传送门 解题思路 利用主席树求区间第k小,先求区间内最大的值,再求第二大,第三大--直到找到连续的三个数可以构成一个三角形.因为对于 ...

  5. 2019杭电多校第二场hdu6602 Longest Subarray(线段树)

    Longest Subarray 题目传送门 解题思路 本题求一个最大的子区间,满足区间内的数字要么出现次数大于等于k次,要么没出现过.给定区间内的数字范围是1~c. 如果r为右边界,对于一种数字x, ...

  6. 2019杭电多校6 hdu6638 Snowy Smile(二维最大矩阵和 线段树)

    http://acm.hdu.edu.cn/showproblem.php?pid=6638 题意:给你一些点的权值,让找一个矩形圈住一部分点,问圈住点的最大权值和 分析:由于是稀疏图,明显要先把x, ...

  7. 2019杭电多校三 C. Yukikaze and Demons (点分治)

    大意: 给定树, 每个点有一个十进制数位, 求有多少条路径组成的十进制数被$k$整除. 点分治, 可以参考CF715C, 转化为求$10^a x+b\equiv 0(mod\space k)$的$x$ ...

  8. 2019杭电多校第七场 HDU - 6656 Kejin Player——概率&&期望

    题意 总共有 $n$ 层楼,在第 $i$ 层花费 $a_i$ 的代价,有 $pi$ 的概率到 $i+1$ 层,否则到 $x_i$($x_i \leq 1$) 层.接下来有 $q$ 次询问,每次询问 $ ...

  9. 2019杭电多校一 C. Milk (dp)

    大意: $n*m$棋盘, 初始位置$(1,1)$, 横坐标为$\frac{m+1}{2}$时可以向下走, 否则只能左右走, 每走一步花费$1$秒. 有$k$管奶, 第$i$罐位置$(r_i,c_i)$ ...

随机推荐

  1. 判断 js 类型的方式

    1. typeof 可以判断出'string','number','boolean','undefined','symbol'但判断 typeof(null) 时值为 'object'; 判断数组和对 ...

  2. Matlab 图像平移、旋转、缩放、镜像

    今天学习了用Matlab实现对图像的基本操作.在Matlab中,图像是按照二维矩阵的形式表示的.所以对图像的操作就是对矩阵的操作. 对图像进行缩放.平移.旋转,都可以转化为矩阵的运算. 关于变换矩阵的 ...

  3. ST (Sparse Table:稀疏表)算法

    1541:[例 1]数列区间最大值 时间限制: 1000 ms         内存限制: 524288 KB提交数: 600     通过数: 207 [题目描述] 输入一串数字,给你 MM 个询问 ...

  4. SQL注入自学[第一学:一个简单的注入环境的编写]

    /* 转载请注明出处 ID:珍惜少年时 */ CODE区域: /*注:现在mysql_connect的这种连接方式已经被放弃了,也就是说不用了,老夫也是新手上路故,下载了一个wampserver2.2 ...

  5. win7 安装 IIS 配置ASP 【原创】

    1.安装https://jingyan.baidu.com/article/5553fa8215f7ef65a2393413.html2.测试localhost  打开测试没问题3.配置网站--添加站 ...

  6. 123457123456#0#-----com.yuming.baoBaoAiXueXi01hanzi--前拼后广--幼儿园宝宝学汉字

    123457123457#0#-----com.yuming.baoBaoAiXueXi01hanzi--前拼后广--幼儿园宝宝学汉字

  7. mysql新建数据库(database)设置为utf8

    CREATE DATABASE IF NOT EXISTS yourdbname DEFAULT CHARSET utf8 COLLATE utf8_general_ci;

  8. CentOS 7启动与切换图形界面

    安装图形界面 默认情况下是不会安装图形界面的,所以需要自己手动安装,步骤如下: 1.开启系统,以root身份进入 安装X(X Window System),命令如下: yum groupinstall ...

  9. 《Fluid Engine Development》 学习笔记2-基础

    断断续续花了一个月,终于把这本书的一二两章啃了下来,理解流体模拟的理论似乎不难,无论是<Fluid Simulation for Computer Graphics>还是<计算流体力 ...

  10. java面试准备策略

    我将结合网络教学视频,根据java以下几个特性进行学习. 平台无关性 GC 语言特性 面向对象 类库 异常处理