2025.4.1 NOI 模拟赛 题解

比赛

T1 NFLS #18079. 愚人节快乐 \(\quad\) P11882 [RMI 2024] 彩虹糖 / Skittlez

题意

一个 \(n\times n\) 的矩阵,\(q\) 次操作在矩阵 \(({^1x_i}\sim {^2x_i},{^1y_i}\sim {^2y_i})\) 中加入 \(k_i\)\(c_i\),求最终每个位置的绝对众数或报告该位置无绝对众数,\(n\le1000,q\le5\times10^5\)

分析

考虑摩尔投票

枚举答案的每个二进制位

对于位置 \((x,y)\),若这一位为 \(1\) 的数量多于这一位为 \(0\) 的数量,则 \((x,y)\) 处的答案(若存在)的这一位为 \(1\),否则为 \(0\)

因此枚举修改 \(({^1x},{^2x},{^1y},{^2y},c,k)\),若 \(c\) 的这一位为 \(1\) 则矩阵 \(({^1x}\sim{^2x},{^1y}\sim{^2y})\)\(k\),否则减 \(k\),若最终位置 \((x,y)\) 的值大于 \(0\),则令答案的这一位为 \(1\),否则为 \(0\)

这一过程容易使用二维前缀和实现,时间复杂度 \(O(\log q(q+n^2))\)

检验答案容易使用二维树状数组实现,时间复杂度 \(O((q+n^2)\log^2 n)\)

总时间复杂度 \(O((q+n^2)(\log^2 n+\log q))\),常数较小,瓶颈在于检验答案

代码

参考

T2 NFLS #18080. Matchus \(\quad\) CF1844H Multiple of Three Cycles

题意

一个排列 \(p_{1\sim 3n}\) 合法当且仅当其形成的所有置换环长都是 \(3\) 的倍数,有一个长为 \(n\) 的排列,每次给定一个位置的值,并求出此时可能的合法排列数量,\(n\le9\times10^5\)

分析

先正向扫描一遍,求出第一个不合法的时刻 \(lp\)(即该时刻及以后,给定的一部分排列中出现了长不为 \(3\) 的倍数的置换环,若不存在这样的时刻则为 \(n+1\)),则该位置及之后的答案都是 \(0\),该位置之前的答案只需要考虑未填充部分即可(以下只考虑求解这一部分),这部分容易并查集实现,时间复杂度 \(O(n\alpha(n))\)

显然某一时刻的答案只与链长 \(\bmod 3=0\)(以下称为一类链)的数量、链长 \(\bmod 3=1\)(以下称为二类链)的数量、链长 \(\bmod 3=2\)(以下称为三类链)的数量有关,设三者为 \((x,y,z)\),答案为 \(dp(x,y,z)\)

先考虑 \(x\ne 0\) 的情况,假设剩余 \(x+y+z-1\) 条都已放置完毕,考虑最后一条一类链,可以选择插入之前 \(x+y+z-1\) 条的任意一条之后,\(x+y+z-1\) 种选择,也可以新开一个置换环,\(1\) 种选择,两者都变为 \((x-1,y,z)\),因此 \(f(x,y,z)=(x+y+z)f(x-1,y,z)\)

因此对于任意 \(x\ne 0\)\(f(x,y,z)=\frac{(x+y+z)!}{(y+z)!}f(0,y,z)\),令 \(g(x,y)=f(0,x,y)\),以下只考虑 \(g\) 的计算

边界为 \(g(0,0)=g(1,1)=1\)\(g(2,2)=8\),容易计算

转移有两种角度

考虑最后一条二类链的放置:若与另一条二类链并为一条三类链,则贡献为 \((x-1)g(x-2,y+1)\);若与一条三类链并为一条一类链,则贡献为 \(y f(x-1,y-1,1)=y(x+y-1)g(x-1,y-1)\);即

\[g(x,y)=(x-1)g(x-2,y+1)+y(x+y-1)g(x-1,y-1) \]

考虑最后一条三类链的放置,类似可得

\[g(x,y)=(y-1)g(x+1,y-2)+x(x+y-1)g(x-1,y-1) \]

这样可以得到一个 \(O(n^2)\) 的算法

\(c_{i,0/1/2}\) 表示第 \(i\) 次操作后三种链的数量,容易在计算 \(lp\) 的同时得到

则实际上用到的 \(g\) 只有 \(g(c_{i,1},c_{i,2})\)

\((c_{n,1},c_{n,2})\ne (0,0)\) 则在最后补上一些操作使得最后一组为 \((0,0)\)

由于 \(g(x,y),(x-2,y+1),g(x-1,y-1)\) 中知二得一,\(g(x,y),g(x+1,y-2),g(x-1,y-1)\) 中知二得一,若某一时刻知道 \(g(x,y),g(x+1,y+1)\),就可以推出 \(g(x+2,y-1)\)\(g(x-1,y+2)\),从而得到 \(g(x+3,y)\)\(g(x,y+3)\)

因此 \((x,y,g(x,y),g(x+1,y+1))\) 可以得到 \((x+2,y-1,g(x+2,y-1),g(x+3,y))\)\((x-1,y+2,g(x-1,y+2),g(x,y+3))\),称这两种变换为 \(\text{X}\)\(\text Y\)

初始令 \((x,y,g(x,y),g(x+1,y+1))=(1,1,1,8)\),倒序枚举 \((c_{i,1},c_{i,2})\),则 \((c_{i+1,1},c_{i+1,2})\)\((c_{i,1},c_{i,2})\) 的所以变换都可用若干次 \(\text X\)\(\text Y\) 实现,分讨即可(需要特判 \((c_{i,1},c_{i,2})=(0,0)\) 的情况)

总时间复杂度 \(O(n\alpha(n))\)

代码

参考 1

参考 2

T3 NFLS #18081. Little09's Life

比赛结果

\(72+16+10\)\(\text{rk}43\)

posted @ 2025-04-01 20:33  Hstry  阅读(20)  评论(0)    收藏  举报