P9482 [NOI2023] 字符串 题解
\(36pts\)
\(O(tqn^2)\)暴力即可
\(40pts\)
对于最朴素的暴力优化,从头到尾扫,如果已经当前位字符比出优先级,那么直接能判断了,没必要往后跑了,第15个性质B的也给跑过了,我没料到,不过数据强一点其实和20pts没区别
\(性质A(60pts)\)
没有想出来
\(性质B(72pts)\)
写这个性质只有12pts,但是对于思考正解有很大帮助
给定st和r,题目让我们求 \(s[st,st+l-1]\) 字典序小于 \(R(s[st+l,st+2l-1])\) 且 1<=l<=r 的个数,先把反串接在后面,用特殊符号连接。既然这个东东很像回文,那我们就把他搞成成前缀或后缀表示,采用放缩法,于是上面的东东相当于是: \(s[st,n]<=s[1,st+2l-1]\) ,跟上面的东东没两样,然后就是st开始的后缀小于st+2l-1结尾的前缀,感觉是SA+ds状物(SAM维护不了rank)。按照这样子搞显然会出现重复,不过写B性质绰绰有余,正解感觉就是搞个容斥减掉贡献了
令\(n=|S+char+revS|\)
那么 \(yn=|S| ,有n=2yn+1\)
所以需要求 pos属于 \([n+2-st-2r,n-st]\) 且满足 pos和st奇偶性相同,rank[st]<rank[p]的个数
就变成了经典模型二维数点,但是需要分奇偶去搞,分奇偶去搞的原因如下:
\(A=S[st,st+l-1],B=S[st+l,st+2l-1]\)
我们尝试将 \(l\) 增加一位,比较的两个子串变成了 \(A'=S[st,st+l],B'=S[st+l+1,st+2l+1]\)
我们发现 \(B'\) 的右端点较 \(B\) 的右端点增加了 \(2\).
可以发现,在固定 \(l\) 的前提下,\(B\) 的右端点奇偶性是固定的, 所以我们需要将询问按 \(l\) 的奇偶性分别建立树状数组.
正解
在B性质基础上,考虑容斥,非法情况就是 \(S[st,st+2l-1]\) 构成回文串,并且 \(rank[st]<rank[st+2l-1]\) ,那就要减掉1种情况
现在想怎么搞出回文串,显然是要找偶回文,因为你没有理由中间有个字符(但是我们可以假设回文中心是 \(i+\frac{1}{2}\) )然后对于所有以某个位置为回文中心的所有偶回文串,针对 \(s[i...]和revs[..j]\) 要么全产生贡献,要么全都不产生贡献,所以就不需要用PAM和Manacher了,然后我们求回文串是什么,显然转化成了SA的经典问题,求任意两个后缀的lcp,不过要注意两个串是同一个(不过本质上是一样的),然后对于每一个 \(i\),扫过去的时候就又是个二维数点了
P9482 [NOI2023] 字符串 题解的更多相关文章
- 最长重复字符串题解 golang
最长重复字符串题解 package main import ( "fmt" "strings" ) type Index map[int]int type Co ...
- [SCOI2010]生成字符串 题解(卡特兰数的扩展)
[SCOI2010]生成字符串 Description lxhgww最近接到了一个生成字符串的任务,任务需要他把n个1和m个0组成字符串,但是任务还要求在组成的字符串中,在任意的前k个字符中,1的个数 ...
- BZOJ4259:残缺的字符串——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=4259 很久很久以前,在你刚刚学习字符串匹配的时候,有两个仅包含小写字母的字符串A和B,其中A串长度 ...
- BZOJ1856:[SCOI2010]字符串——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=1856 lxhgww最近接到了一个生成字符串的任务,任务需要他把n个1和m个0组成字符串,但是任务还 ...
- LintCode-282 · 解压字符串-题解
题目链接:https://www.lintcode.com/problem/282/description?_from=collection&fromId=208描述:小Q想要给他的朋友发送一 ...
- cojs 疯狂的字符串 题解报告
首先这道题是GT考试的加强版本QAQ 当n<k的时候,答案显然是10^n 当n=k的时候,答案显然是10^n-1 这样就有20分辣 之后我们考虑k<=20的做法 显然设f(i,j)表示前i ...
- Codeforces Round #309 (Div. 2) A. Kyoya and Photobooks 字符串水题
A. Kyoya and Photobooks Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/5 ...
- LeetCode一句话题解
深度优先搜索 人生经验 1. 需要输出所有解.并由于元素集有重复元素,要求返回的结果需要去重的情况,可考虑使用值对应数量的map,然后分别考虑依次取不同数量该值的可能. LeetCode39 题目:给 ...
- Codeforces Round #466 (Div. 2) 题解940A 940B 940C 940D 940E 940F
Codeforces Round #466 (Div. 2) 题解 A.Points on the line 题目大意: 给你一个数列,定义数列的权值为最大值减去最小值,问最少删除几个数,使得数列的权 ...
- NOIP模拟测试25「字符串·乌鸦喝水·所陀门王的宝藏(陀螺王)」
字符串 题解 没看出catalan怎么办 dp打表啊! 考虑大力dp拿到30分好成绩!顺便收获一张表 打表发现$C_{n+m}^{m}-C_{n+m}^{m-1}$ 仔细观察然后发现其实就是之前的网格 ...
随机推荐
- Java相关小知识_6_15
实体完整性要求每个表都有唯一标识符,每一个表中的主键字段不能为空或者重复的值. 参照完整性要求关系中不允许引用不存在的实体.设定相应的更新删除插入规则来更新参考表. Java语言使用的是Unicode ...
- influxdb 保留策略
转载请注明出处: InfluxDB 中的保留策略用于定义时间序列数据在数据库中的保留期限.保留策略决定了数据在 InfluxDB 中的存储持续时间和精度.以下是 InfluxDB 的保留策略类型以及如 ...
- 使用Hexo搭建个人博客网站
参考CSDN上的博客.特此感谢wsmrzx.
- VueX报错:Cannot read property 'commit' of undefined
原因 main.js文件中没有引入store 解决方案 添加如下代码即可 import store from "./store"; new Vue({ el: '#app', ro ...
- openpyxl 统一表格样式
# 统一表格样式 rows = ws.max_row columns = ws.max_column # print(rows) # print(columns) for row in range(1 ...
- react中常见hook的使用方式与区别
1.什么是hook?react hook是react 16.8推出的方法,能够让函数式组件像类式组件一样拥有state.ref.生命周期等属性. 2.为什么要出现hook?函数式组件是全局当中一个普通 ...
- CentOS7更新OpenSSH
前言 整个过程不要断开ssh链接,如有必要可使用telnet远程操作. 系统版本:centos 7.9 OpenSSL版本:1.0.2k -> 1.1.1q OpenSSH版本:7.4p1 -& ...
- Java基础实现加油站圈存机系统
加油站圈存机系统 对于加油卡而言,圈存是将用户账户中已存入的资金划转到所持的加油卡上后方可使用.通俗一点的说法就是您在网点把钱存入主卡中,再分配到下面的副卡,由于副卡都在使用车辆的驾驶员手中,需要 ...
- Prototype 原型模式简介与 C# 示例【创建型4】【设计模式来了_4】
〇.简介 1.什么是原型模式? 一句话解释: 针对比较耗时的对象创建过程,通过原型的 Clone 方法来克隆对象,而非重新创建. 原型设计模式(Prototype Design Pattern)是 ...
- .NET Core基础到实战案例零碎学习笔记
前言:前段时间根据 [老张的哲学] 大佬讲解的视频做的笔记,讲的很不错.此文主要记录JWT/DI依赖注入/AOP面向切面编程/DTO/解决跨域等相关知识,还包含一些.NET Core项目实战的一些案例 ...