码迷,mamicode.com
首页 > 其他好文 > 详细

多校模拟9

时间:2020-07-22 20:39:25      阅读:75      评论:0      收藏:0      [点我收藏+]

标签:邻接矩阵   并且   直接   生成   长度   mat   集合   其他   就是   

A.s1mple

直接做不好做,考虑求出答案数组经过某种变换后的数组,再经过逆变换求出答案数组。考虑求出答案的超集数组。
那么实际上就是钦定一些位置必须选1,其他位置任意的方案数。
假如钦定了一些位置是1,那么可以发现方案数只和每一个极长1连续段有关,于是可以暴力枚举每个极长连续1段的长度,总状态数为n的整数划分数。
给出的矩阵看成邻接矩阵,那么\(b_{i,j}=1\)等价于\(i\)\(j\)有一条边。那么极长连续1段等价于可以将这个某个点集连成一条链。
假如已经确定了\(f(S)\)表示将\(S\)内的点集连成一条链的方案数,并且枚举了一个n的划分,那么只要将这些\(f(S)\)进行子集卷积,方案数就是\(2^n-1\)处的系数。由于集合的总长度恰好是n,所以这里的子集卷积得到的最后一项系数恰好就是对的。
于是可以得到答案的超集数组,然后进行\(fwt\)即可\(O(1)\)询问。

B.s2mple

答案可以转化为给\(S[l:r]\)加上一个前缀或者一个后缀的方案,两种方案不同当且仅当前缀不同或者后缀不同。
加上前缀可以考虑这个节点在\(SAM\)上的子树,那么只要求出子树每个节点能够加上的本质不同后缀数,这个东西可以在\(SAM\)上走转移边\(dp\)得到。
于是预处理一下每个节点的子树和就行了。

C.s3mple

首先把整个序列中的最大值提出来,然后可以划分成两个子问题,于是可以枚举左右的大小和总权值暴力\(dp\)
然后将\(dp\)数组写成生成函数,发现转移实际上就是做卷积。然后可以用点值来做\(dp\)
现在的问题是询问,要插值出这个多项式的某项系数,那么直接将拉格朗日插值的式子展开即可。
发现复杂度有点高,所以可以先求出所有多项式的积,求某一项的时候除掉一个多项式即可。

多校模拟9

标签:邻接矩阵   并且   直接   生成   长度   mat   集合   其他   就是   

原文地址:https://www.cnblogs.com/hzoi-cbx/p/13357289.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!