关于我用暴力切了S组T4原题这件事
  • 板块学术版
  • 楼主HYX1124
  • 当前回复14
  • 已保存回复14
  • 发布时间2023/10/24 21:02
  • 上次更新2024/1/18 12:10:27
查看原帖
关于我用暴力切了S组T4原题这件事
253342
HYX1124楼主2023/10/24 21:02

对于T4,显然可以记录 preipre_i 为以 ii 为右端点,最短合法子串的左端点,再减 11

则先设 prei=i−1pre_i=i-1 ,若 aprei≠aia_{pre_i}\neq a_i,则不断设 prei=prepreipre_i=pre_{pre_i},直到 prei=0pre_i=0

同时记录 fif_i 为以 ii 为右端点的合法子串数量,则有 fi=fprei+1f_i=f_{pre_i}+1(如果 preipre_i 存在的话) ,答案就是 fif_i 求和

这样时间复杂度是 O(nΣ)O(n\Sigma) 的,其中 Σ\Sigma 是字符种类,这样复杂度对于 T4 是正确的

然而对于 CF1223F Σ=3e5\Sigma=3e5 ,这时直接做会超时,观察大数据会发现问题出在即使 [0,prei][0,pre_i] 中没有 aia_i 了,还在往前跳,则考虑记录 firstifirst_i 表示 aia_i 最早出现的位置,当 prei<firstipre_i<first_i 时,直接设 prei=0pre_i=0

这样我们就可以愉快的 AC 啦!/xk

2023/10/24 21:02
加载中...