loj2083 优秀的拆分 [NOI2016] SA
正解:SA
解题报告:
显然$AABB$串相当于是由两个$AA$串拼起来的,所以可以先考虑如果求出来了所有$AA$串怎么求答案?
就假如能统计出$st[i]$表示所有以$i$为开头的$AA$串的个数,$en[i]$表示所有以$i$为结尾的$AA$串的个数,$ans$就会等于$\sum en[i]\cdot st[i+1]$,$O(n)$地求下就好$QwQ$
于是现在的目标就是快速地求出$st$数组和$en$数组辽
这儿有四个方法(两个暴力+两个正解),大概会分别港下$QwQ$
第一个暴力就很$easy$啊,就字符串的题想不出来正解的时候自然而然就会想到用哈希乱搞一通,,,?
这题的话哈希就非常无脑啊,$O(n^{2})$做下就好,,,
瞎解释下趴,就以$st$为$eg$,先循环一个$i$表示起始位置,然后循环一个$y$表示长度,判一下$str[i\sim i+j-1]$484等于$str[i+j\sim i+2\cdot j-1]$就好
然后这就有95$pts$了,,,
然后对于这个暴力,其实优化下就有100$pts$了
就一般来说看到哈希,自然而然就再想到二分+哈希?于是就更进一步,考虑如果用二分优化下怎么搞
首先考虑到每次先枚举长度$l$,然后每隔$l$设一个关键点,那么显然每个长度为$2\cdot l$的串$AA$一定会经过两个关键点
于是考虑对每个关键点求出它和前一个点前缀的最长公共后缀和后缀的最长公共前缀,这儿显然是可以哈希求的不说
然后判一下,如果$lcp$的长度和$lcs$的长度之和大于等于$l$就说明可以组成,然后因为有多次修改但只有一次输出,$so$可以差分下
然后就做完辣!
然后如果能get这个想法,就可以想到,显然$SA$也是可做的鸭$QwQ$
就现在从这个$hash$可以看出,其实现在的瓶颈就快速求出相邻两点的$lcp$和$lcs$嘛,然后上面是用了个二分+哈希搞过去了
那就显然考虑用$SA$,欧克水过去辣!
(听说$SA$能做的$SAM$都能做,,,?$so$也许学了$SAM$之后我还会来$upd$下$SAM$的$code$趴$QwQ$
说得有些简略,,,也麻油放代码,,,然后$kmp$的做法也还麻油写,,,
期中考完如果还没退组再仔细写下然后放代码趴$QAQ$
loj2083 优秀的拆分 [NOI2016] SA的更多相关文章
- [BZOJ]4650 优秀的拆分(Noi2016)
比较有意思的一道后缀数组题.(小C最近是和后缀数组淦上了?) 放在NOI的考场上.O(n^3)暴力80分,O(n^2)暴力95分…… 即使想把它作为一道签到题也不要这么随便啊摔(╯‵□′)╯︵┻━┻ ...
- UOJ#219/BZOJ4650 [NOI2016]优秀的拆分 字符串 SA ST表
原文链接http://www.cnblogs.com/zhouzhendong/p/9025092.html 题目传送门 - UOJ#219 (推荐,题面清晰) 题目传送门 - BZOJ4650 题意 ...
- [BZOJ]4650 优秀的拆分(Noi2016)(哈希+二分)
传送门 题解 听说大佬们这题都是用SA秒掉的 然而SA的时间复杂度的确很优秀,缺点就是看不太懂…… 然后发现一位大佬用哈希华丽的过了此题,而且讲的特别清楚->这里 我们只要考虑以每一个点结尾 ...
- [NOI2016]优秀的拆分 后缀数组
题面:洛谷 题解: 因为对于原串的每个长度不一定等于len的拆分而言,如果合法,它将只会被对应的子串统计贡献. 所以子串这个限制相当于是没有的. 所以我们只需要对于每个位置i求出f[i]表示以i为开头 ...
- [NOI2016]优秀的拆分(SA数组)
[NOI2016]优秀的拆分 题目描述 如果一个字符串可以被拆分为 \(AABB\) 的形式,其中 A和 B是任意非空字符串,则我们称该字符串的这种拆分是优秀的. 例如,对于字符串 \(aabaaba ...
- 并不对劲的bzoj4650:loj2083:uoj219:p1117:[NOI2016]优秀的拆分
题目大意 "优秀的拆分"指将一个字符串拆分成AABB的形式 十次询问,每次给出一个字符串S(\(|S|\leq3*10^4\)),求它的所有子串的优秀的拆分的方案数之和 题解 此题 ...
- UOJ#219. 【NOI2016】优秀的拆分 [后缀数组 ST表]
#219. [NOI2016]优秀的拆分 题意:求有多少AABB样子的子串,拆分不同的同一个子串算多个 一开始一直想直接求,并不方便 然后看了一眼Claris的题解的第一行就有思路了 如果分开,求\( ...
- 【BZOJ4650】【NOI2016】优秀的拆分(后缀数组)
[BZOJ4650][NOI2016]优秀的拆分(后缀数组) 题面 BZOJ Uoj 题解 如果我们知道以某个位置为开始/结尾的\(AA\)串的个数 那就直接做一下乘法就好 这个怎么求? 枚举一个位置 ...
- 「NOI2016」优秀的拆分 解题报告
「NOI2016」优秀的拆分 这不是个SAM题,只是个LCP题目 95分的Hash很简单,枚举每个点为开头和末尾的AA串个数,然后乘一下之类的. 考虑怎么快速求"每个点为开头和末尾的AA串个 ...
随机推荐
- poj 3278 搜索
描述: Farmer John has been informed of the location of a fugitive cow and wants to catch her immediate ...
- 《剑指offer》二叉搜索树和双向链表
本题来自<剑指offer> 反转链表 题目: 思路: C++ Code: Python Code: 总结:
- [原创]基于Zynq Linux环境搭建资源
链接: https://pan.baidu.com/s/1JwNfLY50eoMr2_UO3lAfZw 密码: j8ex 链接: https://pan.baidu.com/s/1JwNfLY50eo ...
- ansible的lookup
lookup路径: /usr/lib/python2.7/site-packages/ansible/plugins/lookup 所有的lookup插件列表cartesian.py dnstxt.p ...
- 咸鱼入门到放弃8--jsp<三>jsp内置对象
NO. 内置对象 类型 1 pageContext javax.servlet.jsp.PageContext 2 request javax.servlet.http.HttpServletRequ ...
- aspnet mvc 中 跨域请求的处理方法
ASP.NET 处理跨域的两种方式 方式1,后端程序处理.原理:给响应头加上允许的域即可,*表示允许所有的域 定义一个cors的过滤器 加在在action或者co ...
- 深入理解Java虚拟机阅读心得(二)
垃圾收集 程序计数器.虚拟机栈.本地方法栈三个区域随线程而生,随线程而灭:这几个区域的内存分配和回收都具备稳定性,不需要过多的考虑回收的问题.而Java堆和方法区则不一样. Java堆中存储了几乎所有 ...
- django-request对象
HTTP 应用的信息是通过 请求报文 和 响应报文 传递的,关于更多的相关知识,可以阅读<HTTP权威指南>获得. 其中 请求报文 由客户端发送,其中包含和许多的信息,而 django 将 ...
- [PKUSC2018]星际穿越(倍增)
题意:n个点的图,点i和[l[i],i)的所有点连双向边.每次询问(l,r,x)表示x到[l,r]的所有点的最短路径长度和. 首先这题显然可以线段树优化建图,但是需要比较好的常数才能通过45分,还需要 ...
- SDOI2019 省选前模板整理
目录 计算几何✔ DP 斜率优化✔ 四边形不等式✔ 轮廓线DP✘ 各种分治 CDQ分治✔ 点分治✔ 整体二分✔ 数据结构 线段树合并✔ 分块✔ K-D Tree LCT 可持久化Trie✔ Splay ...