Live2D

Solution Set - 多项式杂题

0. 「OurOJ #46942」/「51nod #1824」染色游戏

  Private link & Submission.

  首先,显然有

f(t)=i=0t(ti)ribti.

  这是一个卷积的形式,但是我们需要求出卷积结果在 mod2 意义下的值。从这个 (ti) 入手,发现 (ti)=1(mod2)iti 在二进制表示下是 t 的子集)。也就是说,我们可以直接用子集卷积替代加法卷积O(nlog2n) 求出卷积结果。

1. 「CF 662C」Binary Table

  Link & Submission.

  注意到当行上(列上)的操作全部确定后,列上(行上)每种操作是否进行可以贪心决策。这提示我们枚举一部分,算另一部分。因为有 nm,我们来暴力枚举行上的 2n 种操作是否进行,并在每一列分别算出最小 1 的数量。但这个怎么优化呢?

  难以转化的地方在于“算出最小 1 的数量”,涉及到取 min,我们干脆直接把表打出来:令 [xS]F(x) 表示某一列为 S 时,其仅通过列操作能得到最小 1 的数量。在这个比较构造性的转化之后,接下来的工作就很简单了——令 [xS]G(x) 为原表格中长相为 S 的列的出现次数,那么

R(x)=F(x)×G(x),

其中 × 表示异或卷积。可见 [xT]R(x) 就是行操作为 T 时的答案。复杂度 O(nm+n2n)

2. 「WC 2018」「洛谷 P4221」州区划分

  Link & Submission.

  一大坨式子和离奇限制砸脸——哦,原来是状压题。

  一个连通块合法的条件为:该连通块的诱导子图不存在欧拉回路,即不连通或者存在奇度点。

  状压连通性等一系列处理可以快速求出每个连通块是否合法。记 f(S) 表示划分好 S 集合内的点的贡献和,那么

f(S)=ST=,ST=S[T is legal](uTw(u)uSw(u))pf(S).

  又是子集卷积的形式。注意显然有 |T|>1,所以当引入子集卷积的状态形式 f(|S|,S) 时,转移仍然没有环。直接 O(n22n) 算出来即可。

3. 「THUPC 2019」「洛谷 P5406」找树

  Link & Submission.

  众所周知位独立的运算,特别是这种有交换律的运算,都能用魔改 FWT 支持其卷积。边 (u,v) 的边权 v 做正变换得到向量 v,此时一棵生成树的点权定义为边上向量的点积。点积可以分开算,所以算 w 次矩阵树可以求到记录所有权值的生成树数量的序列 R 做正变换后的结果,把 R 逆变换一下,找到最高非 0 位即可。

  生成树数量很大?随便那一个大素数取模。复杂度是 O(wn3),但你看这是洛谷 / LOJ 还开了 4s 就放心大胆写了叭。

4. 「JOI 2018 Final」「LOJ #2351」毒蛇越狱

  Link & Submission.

  一堆堆 106 让人不禁去想单 log,没想到正解甚至不是 polylog。

  自然,我们希望找到某种“前缀和”来加速查询过程,继而想到本质上为高维前缀和的 and 变换和 or 变换。不妨记原序列为 f,and 变换得到序列 g,or 变换得到序列 h

  但,例如直接用 g 来查询,问题很大——如果某个 bit 限制为 1,查询结果没有问题;但如果某个 bit 限制为 0,根据 and 卷积的规则,我们会将一些这一 bit 为 1 的数加入答案。补救一下?我们对 0 bit 的位置做容斥,即枚举哪些 0bit 变成了 1,我们确实就能得到答案。

  然后就是比较 constructive 的一点:用 g 查询,容斥 0bit;用 h 查询,容斥 1bit;用 f 查询,枚举 ?bit,复杂度平衡,得到 O(L2L+Q2L/3) 的算法。

5. 「OurOJ Contest #2562」多项式佛跳墙

  Private link.

  现推了一遍,直接放草稿了,牛迭之类的地方跳步比较严重,估计会方便记忆(?)带讲解的版本可以看 这里。板子从零开始不断累计,我交“多项式除法”的那发代码应该算是比较完整的全家桶。

  可以发现,最难(步骤最长)的地方是二次剩余。(

Poly-Inversionunv1(modxn)un2v22unv+10(modx2n)v(2unun2v)1(modx2n)u2n=un(2unv)


Poly-Lnu=lnvu=vvu=udx=vvdx


Poly-Expp(u,x)=lnuv=0u2n=un(1lnun+v)


Poly-Sqrtp(u,x)=u2v=0u2n=12(un+v/un)


Quadratic-Residue (for odd primes)i2a2n(modp)(lemma)    ipi(i2)p12i(modp)(lemma)    (a+b)pap+bp(modp)(a+i)p+1ap+1+ip+1a2i2n(modp)((a+i)p+12)2n(modp)


Poly-Division (with remainer)u=pv+r, degr<degvfR(x):=xdegff(x1)uR=pRvR+xdegudegv+1rRuRpRvR(modxdegudegv+1)

  鬼故事:全部 O(nlogn)

6. 「OurOJ #5430」yww 与连通块计数

  Private link & Submission.

  不考虑 gcd 中的以及 lcm 以外的因子,设数 agcd 以外的因子构成集合 Sa,那么连通块合法,等价于 S 之交为 S 之并为全集。

  也就是说,对于每个元素 p,块内都有一个 pS1 也有一个 pS2

  也就是说,存在一对邻接u,v[pSa(u)][pSa(v)]

  也就是说,令边 (u,v) 的权 w(u,v)=Sa(u)Sa(v),则连通块合法等价于 w 之并为全集。

  手动模拟 or-卷积,可以做到 O(n2m),其中 m=15,为 50 以内素数个数。

7. 「OurOJ #47016」排列问题

  Private link & Submission.

  灵活转换“计数视角”,“描述过程”而非“拼凑答案”。

  令 Fi(x) 表示把颜色为 i 的球放入若干不同盒子的 EGF,即

Fi(x)=n1(ai1n1)xnn!.

那么,G(x)=iFi(x) 即把所有盒子按颜色区分,放在一起的 EGF。相同盒子内的球必然贡献同色对,不同盒子间可能贡献同色对。所以 G(x) 亦可以转化为“至少有若干同色对”的 EGF。合并石子 O(mlog2m) 求出 G(x),二项式反演卷出答案的 GF 即可。

8. 「JLOI 2016」「洛谷 P3270」成绩比较

  Link & Submission.

  令 ansK 表示答案。先钦定 K 个被碾压的人的标号,然后考虑每种课程,枚举 B 神的得分组合一下,有

ansK=(N1K)i=0M1(NK1Ri1)j(Uij)Ri1jNRi=(N1K)i=0M1(NK1Ri1)k=0Ri1(Ri1k)UiRi1k(1)kjUijNRi+k.

最后一项自然数幂和可以随意拉插算出来。不过交上去得到了 90 分的好成绩,猛然发现,被碾压的人一定被碾压,但根据式子,没被碾压的人实际上也可能被碾压。所以还需要对 ans 二项式反演一下。注意和式 k=0Ri1K 无关,可以先预处理出来。

  如果实现得优美,可以做到 O(MN2)

posted @   Rainybunny  阅读(100)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
历史上的今天:
2021-05-04 Solution -「AGC 016F」Games on DAG
点击右上角即可分享
微信分享提示