做题记录 26.3.27
NFLS #P13198. 幽灵
预处理 \(zs_i\) 和 \(zt_i\),分别表示 \(s\) 和 \(t\) 对应后缀与 \(s\) 的 \(\text{lcp}\)
预处理 \(t\) 的 \(fail\) 树,及 \(ps_i\) 表示 \(s[1:i]\) 匹配 \(t\) 的最大长度
令 \(cp_i\) 表示 \(s[1:i]\) 中 \(t\) 的出现次数,容易由 \(ps\) 得到
令 \(sml\) 表示 \(a\) 的前缀和
令 \(bps_i\) 表示 \(S[1:sml_i]\) 匹配 \(t\) 的最大长度,\(bps_1=ps_{a_1}\),\(bps_i\) 在 \(bps_{i-1}\) 的基础上跳 \(fail\) 直到 \(zt_{bps_i+1}\ge a_i\) 或空,对于前一种情况 \(bps_i\gets bps_i+a_i\),后一种情况 \(bps_i=ps_{a_i}\)
令 \(bcp_i\) 表示 \(S[1:sml_i]\) 中 \(t\) 出现且结尾于 \(S[sml_{i-1}+1:sml_i]\) 的次数,在 \(cp_{a_i}\) 的基础上跳 \(fail\) 树统计即可
对于一次询问 \([l,r]\),拆为 \(r\) 和 \(l+|t|-2\),此时两个都要求出 \(t\) 在对应前缀中的出现次数
对于一个前缀,求出属于哪个 \(S[sml_{i-1}+1:sml_i]\),前面部分容易统计,后面部分容易统计,跨越部分统计方式类似求 \(bcp\)
此时时间复杂度 \(O(|s|+|t|+(n+q)h)\),其中 \(h\) 为 \(t\) 的 \(fail\) 树高,可以通过
实际上三处 \(O(h)\) 的都容易优化到 \(O(\log |t|)\)
NFLS #35449. 鳍握
显然每条鱼可以到达一个区间,处理出后对端点离散化
转化为每个区间内选择一个点,使得每个位置上点的数量的择 \(2\) 和最大
由于 \(\binom x2+\binom y2\le \binom{x+y}2\),若一个区间包含了选择点数最多的位置,则选择这个位置不劣
令 \(dp_{i,j}\) 表示区间 \([i,j]\) 的答案,钦定其最大值位置 \(k\),则所有 \([i,k]\) 到 \([k,j]\) 的区间都选择 \(k\),左右两边划分为子问题
容易做到 \(O(\sum (nm+m^3))\)
NFLS #35448. 网购图
先考虑符号全相同的情况
按绝对值从小到大排序,可证最优情况下一个长度为偶数的前缀中左半和右半两两配对,剩余后缀和最小值配对
对于符号不全相同的情况,将正数和负数分离,分别按绝对值从小到大排序,显然正数内部没有连边,都连到负数的一个后缀中(且这段后缀长度不超过正数的长度),负数的前缀内部连边处理同上,后缀部分正负一一配对,多余的正数都和负数最小值配对
容易做到 \(O(\sum n^2)\)
容易用多项式技术优化到 \(O(\sum n\log n)\)

浙公网安备 33010602011771号