首页 > 其他分享 >QOJ5256 [CERC2022] H. Insertions 题解

QOJ5256 [CERC2022] H. Insertions 题解

时间:2023-03-08 10:24:55浏览次数:57  
标签:位置 匹配 次数 题解 CERC2022 插入 QOJ5256 长度 失配

题面

题意:

给定字符串 \(S,T,P\),求将 \(T\) 插入进 \(S\) 之后 \(P\) 最多的出现次数。输出:

  • 最多的出现次数;
  • 达到这个最多出现次数的插入位置数量;
  • 达到这个最多出现次数的最靠前的插入位置;
  • 达到这个最多出现次数的最靠后的插入位置。

数据范围:\(1\le |S|,|T|,|P|\le 10^5\)。

题目要我们求的信息量很大,不妨直接求出在每个位置插入 \(T\) 之后 \(P\) 的出现次数。

设将 \(T\) 插入之后 \(S\) 前后两部分为 \(A,B\)。

讨论 \(P\) 出现的位置情况:

  • 完全包含于 \(T/A/B\):可以直接 KMP 预处理。
  • \(A+T\):求出所有长度 \(x\) 满足 \(T\) 长度为 \(x\) 的前缀和 \(P\) 长度为 \(x\) 的后缀匹配。建出 \(S\) 匹配 \(P\) 的失配树,把所有编号为 \(x-1\) 的节点打上标记,在 \(i\) 后插入 \(T\) 得到的形如 \(A+T\) 的匹配数量就相当于失配树上 \(S_{1,i}\) 匹配 \(P\) 的最长前缀的所有祖先的标记和。
  • \(T+B\):将 \(S\)、\(T\)、\(P\) 全部翻转,再做一遍 \(A+T\) 的过程。
  • \(A+T+B\):求出所有 \(T\) 在 \(P\) 中的匹配位置 \([x+1,x+|T|]\),然后就相当于统计有多少位置 \(i\) 满足 \(S_{i-x+1,i}=P_{1,x}\) 且 \(S_{i+1,i+|P|-|T|}=P_{x+|T|+1,|P|}\)。求出 \(S_{1,i}\) 匹配 \(P\) 的最长前缀长度和 \(S_{i+1,|S|}\) 匹配 \(P\) 的反串的最长匹配长度,设为 \(u,v\),那么就是问有多少个 \(x\) 满足 \(x\) 在正串失配树上是 \(u\) 的祖先且 \(|P|-x-|T|\) 在反串失配树上是 \(v\) 的祖先。这是一个二维数点问题,可以离线扫描线 + 树状数组完成。

注意树状数组上界要开到 \(|P|+1\)……因为节点数是最大编号 \(+1\)……

代码:https://paste.ubuntu.com/p/xnd9gHx5WD/

标签:位置,匹配,次数,题解,CERC2022,插入,QOJ5256,长度,失配
From: https://www.cnblogs.com/xsl19/p/cerc2022-h-sol.html

相关文章

  • 【题解】[Ynoi2010] y-fast trie
    题目分析:显然可以对于所有的\(x\)对\(C\)取模后处理。那么就是两种情况:\(x+y\geC\)\(x+y<C\)对于第一种情况直接找最大的两个数就好了,关键就是第二种情......
  • 春测2023 T2题解
    这是一个从暴力到正解的过程。暴力从\(1\)枚举到\(\sqrtn\),枚举每一个\(x\),进行累乘,顺便用一个map数组判重,时间复杂度\(\mathcal{O}(\sqrtn\logn\logn)\),直接T飞......
  • Ubuntu服务器ssh缓慢问题解决
    Ubuntu服务器ssh缓慢问题解决现象:ssh登陆或su-账号时间较长 排查:1、查看了/var/log/syslog未发现明显报错2、查看/var/log/auth.log发现有pam_systemd:Failedtocreate......
  • AGC060C题解
    Link简要题意:称一个长为\(2^n-1\)的排列\(P\)像堆,如果\(P_i\ltP_{2i}\),且\(P_i\ltP_{2i+1}\)。给定\(a,b\),设\(u=2^a,v=2^{b+1}-1\),在所有像堆的排列中任取......
  • ABC279H 题解
    学考时候推的。场上记错模数,以为是\(998244353\)然后想了半天组合数怎么算)简单题。首先序列问题考虑每个位置的生成函数然后乘起来。位置\(k\)的生成函数显然是\[\s......
  • 指针8道笔试题解析
    笔试题1:intmain(){inta[5]={1,2,3,4,5};int*ptr=(int*)(&a+1);printf("%d,%d",*(a+1),*(ptr-1));return0;}//程序的结果是什么?第一......
  • P3574 [POI2014] FAR-FarmCraft 吐槽 + 题解
    洛谷上面的题解写的真的不太好,有很多错误,我来谈谈自己的理解。设\(f[i]\)表示以\(i\)为根节点的子树中(包括节点\(i\))的所有人安装好游戏所需要的时间(与下面的\(g[i]......
  • UVA-212 医院设备利用 题解答案代码 算法竞赛入门经典第二版
    ​​GitHub-jzplp/aoapc-UVA-Answer:算法竞赛入门经典例题和习题答案刘汝佳第二版​​这也是一道根据根据时间做出行为的题目,我的做法和之前的UVA822类似,也是用优先队......
  • UVA-442 矩阵链乘 题解答案代码 算法竞赛入门经典第二版GitHub - jzplp/aoapc-UVA-Ans
    GitHub-jzplp/aoapc-UVA-Answer:算法竞赛入门经典例题和习题答案刘汝佳第二版AC代码#include<iostream>#include<string>#include<stack>usingnamespacestd;struct......
  • UVA-210 并行程序模拟 题解答案代码 算法竞赛入门经典第二版
    ​​GitHub-jzplp/aoapc-UVA-Answer:算法竞赛入门经典例题和习题答案刘汝佳第二版​​注意:每次unlock后,只需要拿出一个在阻塞队列里面的程序放到等待队列的头部。因为......