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}$ 仔细观察然后发现其实就是之前的网格 ...
随机推荐
- Avalonia项目打包安装包
Avalonia项目打包安装包 要将 Avalonia 项目打包成安装包,你可以使用 Avalonia 发布工具来完成 1.创建一个发布配置文件 在你的 Avalonia 项目中,创建一个发布配置文件 ...
- 在虚拟机VMware上安装OpenKylin开源操作系统
在虚拟机(VMware)上安装OpenKylin开源操作系统 今天我们一下学习下开放麒麟系统的安装.也是我的开源项目在OpenKylin上运行的实践. 希望通过该项目了解和学习Avalonia开发的朋 ...
- 并发编程-FutureTask解析
1.FutureTask对象介绍 Future对象大家都不陌生,是JDK1.5提供的接口,是用来以阻塞的方式获取线程异步执行完的结果. 在Java中想要通过线程执行一个任务,离不开Runnable与C ...
- nuitka 将程序编译为单个exe
原文链接:https://github.com/Nuitka/Nuitka 在Windows上,有两种模式,一种是将其复制到您公司指定的AppData,也将其用作缓存,另一种是在临时目录中进行.您需要 ...
- Windows 下搭建 Appium + Android+python 自动化测试环境
前言 本来并不打算写这么一篇文章,但是实践下来发现网上的各种教程里大致有两个问题.一是文章有些跟不上时代,目前android开发和测试的技术更新都比较快,内容有些过期.二是细节部分不是太完整,拼拼凑凑 ...
- Xshell使用技巧及常用配置
Xshell使用 1.调整 Xshell 的终端显示和回滚缓冲区大小 磨刀不误砍柴工,为了更方便地学习 Linux,首先得对终端进行一些调整,步骤如下: 首先通过 xshell 顶部菜单中的文件--& ...
- OpenApi(Swagger)快速转换成 TypeScript 代码 - STC
在现代的 Web 开发中,使用 OpenAPI(以前称为 Swagger)规范来描述和定义 API 已经成为一种常见的做法.OpenAPI 规范提供了一种统一的方式来描述API的结构.请求和响应,使得 ...
- 利用AI点亮副业变现:5个变现实操案例的启示
整体思维导图: 在这里先分享五个实操案例: 宝宝起名服务 AI科技热点号 头像壁纸号 小说推广号 流量营销号 你们好,我是小梦. 最初我计划撰写一篇关于AI盈利策略的文章,对AI目前的技术走向.应用场 ...
- Jmeter+Ant+Jenkins接口自动化框架(续)
前段时间给公司内部项目搭建了一套接口自动化框架,基于实际使用,需要配置自动发送邮件功能,将 执行结果发送给相关负责人.Jenkins本身也提供了一个邮件通知功能,但在提供详细的邮件内容.自定义邮 件格 ...
- paging组件的用法和意义
一.Paging组件的意义 分页加载是在应用程序开发过程中十分常见的需求,我们经常需要以列表的方式加载大量的数据,这些数据通常来自网络或本地数据库.然而,如果一次性将所有数据全部加载出来,必然会消耗大 ...