大意: 给定序列$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. TCP和UDP并实现socket的简单通信

    http://www.cnblogs.com/IPrograming/archive/2012/10/15/CSharp_Socket_4.html http://www.cnblogs.com/do ...

  2. 使用oid2name列出数据库和对应的oid

    [postgres@postgre base]$ ll total 172 drwx------ 2 postgres postgres 12288 Dec 6 09:21 1 drwx------ ...

  3. Android资源文件命名规范学习手册

    [推荐] 资源文件需带模块前缀.[推荐] layout 文件的命名方式. Activity 的 layout 以 module_activity 开头 Fragment 的 layout 以 modu ...

  4. Django之数据库对象关系映射

    Django ORM基本配置 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计表结构和字段 使用 MySQLdb 来连接数据库,并编写数据访问层代码 业务逻辑层去 ...

  5. Django——models中导入数据重复的解决办法

    如果你导入数据过多,导入时出错了,或者你手动停止了,导入了一部分,还有一部分没有导入.或者你再次运行上面的命令,你会发现数据重复了,怎么办呢? django.db.models 中还有一个函数叫 ge ...

  6. iOS-常见问题(错误和警告)

    1.storyboard连线问题    产生原因:将与storyboard关联的属性删除了,但是storyboard中还保持之前所关联的属性.    解决:取消关联就没事了.     2.XXXXX ...

  7. AWS 存储服务(三)

    目录 AWS S3 业务场景 挑战 解决方案 S3的好处 S3 属性 存储桶 Buckets 对象 Object S3 特性 S3 操作 可用性和持久性 一致性 S3 定价策略 S3高级功能 存储级别 ...

  8. 配置Linux描述网络安全CIA模型之可用性案例

    在Linux中防御SYN型DOS攻击的方法比较常见的有: 1.增大队列SYN最大半链接数 2.利用SYN cookie技术   下面分别进行分析. 1.增大队列SYN最大半连接数 在LINUX中执行命 ...

  9. js类似新闻图片轮换(带有文字介绍,其实可以放任何内容)

    js类似新闻图片轮换(带有文字介绍,其实可以放任何内容) 主要是利用style="display:block;" 属性<script language="javas ...

  10. 电脑磁盘分区助手:DiskGenius磁盘管理与数据恢复软件

    百度搜索DiskGenius自行下载