首页 > 其他分享 >P9482 [NOI2023] 字符串

P9482 [NOI2023] 字符串

时间:2023-07-31 19:22:04浏览次数:46  
标签:P9482 2l 后缀 NOI2023 字符串 rk 回文

P9482 [NOI2023] 字符串

限制长的很像回文串,但是是字典序关系。

定睛一看比较的是原串 \(s\) 的一个后缀的前缀 和 翻转串 \(s'\) 的一个后缀的前缀比字典序。

直接把 \(s'\) 拼到 \(s\) 后面,中间加个分隔符,来一次后缀排序。排名小的后缀字典序比排名大的后缀小。

设当前比较的是 \([i,i+l-1]\) 和 \([i+l,i+2l-1]\),两个串串长均为 \(l\)。

设 \(rk[i]\) 为 从 \(i\) 开始的后缀的排名。

那么我们要找到 \([i+l,i+2l-1]\) 在 \(s'\) 中对应的位置。在 \(s\) 与 \(s'\) 中插入一个分隔符的情况下,对应的区间将会是 \([2(n+1)-(i+2l-1),2(n+1)-(i+l)]\)。在不考虑 \([i,i+2l-1]\) 本身就是回文串的情况下,如果 \(rk[i]<rk[2(n+1)-(i+2l-1)]\) 那么这组 \((i,l)\) 合法。

可以发现,对于一个 \((i,r)\),要与它比较的位置在\(s'\) 中的对应位置是 \(2(n+1)-(i+2x-1),1\le x\le r\)。是区间 \([2(n+1)-(i+2-1),2(n+1)-(i+2r-1)]\) 中所有奇数或者偶数。于是我们从排名大到小枚举后缀,按照起点位置奇偶性分别插入两棵树状数组,将询问挂在 \(i\) 上,枚举到 \(i\) 时进行区间查询即可。

接下来考虑去重,即 \([i,i+2l-1]\) 本身就是回文串的情况

对于一个极长偶回文串 \([l,r]\),回文中心为 \((p,p+1)\)。若 \(rk[l]<rk[2(n+1)-r]\) 即 \(l\) 开头的后缀排名比 \(r\) 在 \(s'\) 中对应位置开头的后缀排名小,那么在计算满足 \(l\le i\le p,i+r\ge p+1\) 的 \((i,r)\) 时会多算一次这个回文串(因为会算到 \(i\) 开头的这个回文串的一部分)。

我们用 manacher 先找出每个中心的极长偶回文串,然后将询问按照 \(i+r\) 排序,从小到大枚举并实时加入合法的回文中心 \(p\),即将 \(p\) 所对应的 \([l,p]\) 区间加 1,然后查询 \(i\) 的单点值即为多算的数量。

标签:P9482,2l,后缀,NOI2023,字符串,rk,回文
From: https://www.cnblogs.com/jimmywang/p/17594277.html

相关文章

  • java设置字符串颜色
    如何实现Java设置字符串颜色概述本文将向刚入行的小白开发者介绍如何在Java中设置字符串颜色。我们将使用Java的控制台输出来展示不同颜色的字符串。首先,我们将介绍整个实现的流程,然后逐步讲解每个步骤所需的代码和注释。实现流程步骤描述1.导入必要的类和包2.创......
  • LC 8、字符串转换整数(atoi)
    LC8、字符串转换整数(atoi)题目描述Leetcode上的8、字符串转换整数(atoi),难度为中等请你来实现一个myAtoi(strings)函数,使其能将字符串转换成一个32位有符号整数(类似C/C++中的atoi函数)。函数myAtoi(strings)的算法如下:读入字符串并丢弃无用的前导空格检查下......
  • 字符串基础
    几乎所有字符串算法都存在一个共性:基于所求信息的特殊性质与已经求出的信息,使用增量法与势能分析求得所有信息。这体现了动态规划思想。Manacher很好地证明了这一点:它维护所求得的最右回文子串的回文中心\(d\)与回文半径\(r\),利用回文性质通过均摊右端点移动距离在线性时间内......
  • mysql 字符串包含某个字符
    MySQL字符串包含某个字符在MySQL中,我们常常需要对字符串进行各种操作,包括判断一个字符串是否包含某个字符。本文将介绍如何使用MySQL语句来判断字符串是否包含某个字符,以及提供相应的代码示例。使用LIKE语句MySQL中提供了LIKE语句来判断一个字符串是否包含某个字符。LIKE语句是......
  • python 接口返回存储json字符串包含\n
    实现“python接口返回存储json字符串包含\n”的步骤为了实现接口返回存储包含特殊字符\n的JSON字符串,我们需要按照以下步骤进行操作:步骤描述1创建一个Python接口2生成包含特殊字符\n的JSON字符串3返回JSON字符串现在,让我们一步步实现这个过程。步骤1:创建......
  • 【ACM专项练习#02】整行字符串、输入vector、打印图形、处理n组数据以及链表操作等
    输入整行字符串平均绩点题目描述每门课的成绩分为A、B、C、D、F五个等级,为了计算平均绩点,规定A、B、C、D、F分别代表4分、3分、2分、1分、0分。输入有多组测试样例。每组输入数据占一行,由一个或多个大写字母组成,字母之间由空格分隔。输出每组输出结果占一行。如果输入的大......
  • P3375 【模板】KMP 字符串匹配 题解
    前言狗屁不是,建议别看!!! 题目链接P3375【模板】KMP字符串匹配-洛谷|计算机科学教育新生态(luogu.com.cn) 分析先给个例子s1:ABCABCABBs2:ABCABB若使用朴素算法匹配,当匹配到s1:ABCABCABBs2:ABCABB时,朴素算法会跳出,然后匹配下一位。最终匹配到s1:ABCABCABBs2:......
  • 2023 联合省选-PKUSC2023-NOI2023游记
    在这段时间主要在学文化课,没怎么停课,天天暴力拼盘,所以索性合在一起。感觉非常意识流,和OI关系好像也不大。pig嫌我开始写的太短,我积极听取他人建议,加了一车流水账。联赛结束以后就退役了。因为即使NGOI也大概率会被卡“省线”,但还打算参加省选碰碰运气。遂在省选前两周申请一周半......
  • 字符串编码-Unicode
    作为程序员难免会与字符串打交道,而字符串的编码方式接触得最多的就是ASCII码了,然而ASCII码每个字母对应1Byte,因此字母总量最多只有256个,这是不能满足世界上众多的文字的需求的,因此,Unicode编码的出现便是必然的。UnicodeUnicode 为世界上所有字符都分配了一个唯一的数字编号,这个......
  • 7.30 day7字符串
    60+10+100+0=170连续2天没写出来简单题了,不过我的字符串是真的弱,趁着这次复习一下T1倒序考虑即可T2之前模拟赛里有,但是只记得做过不记得做法了定义一个字符串的本质是\(A_x=x-pre(A_x)\)\(pre(x)\)指上一次出现\(x\)的位置,如果是第一个字符则是0两个字符串相等的条件是本......