4.22 省选模拟赛 三元组 manacher 回文自动机


容易发现可以枚举j 那么只需要计算出 l~j这段是回文串的l的和 以及j+1~r这段是回文串的r的和。
可以manacher 之后想要求出以j为右端点的回文串左端点的和 这个东西我们通过某个点为中心的最长回文子串来做出。
容易发现是一个类似于等差数列的东西的 可以上线段树 不过没有在线询问啥的 可以差分。
由于公差相同 所以一些标记是可以合并的 不过需要分奇偶进行分类讨论 注意差分的位置也不要错了。。
实际上要差分两边 维护两个数组一个维护和的差分 一个维护等差数列的差的差分即可。
这样复杂度为O(n)。
但是这样过于麻烦了。
考虑回文自动机 可以发现建立出来之后 可以直接求出以某个端点为左端点的回文串的个数以及回文串的长度和。
这样求出左端点的和就很容易了。同理右端点再从后往前建一个即可。
时间复杂度O(n) 不过由于是多组数据 每次需要清空 所以多一个log=26的常数。勉强能过。
ps:回文自动机很容易忘 但是 建立时可以依靠几个关键点来建立:奇偶根不能忘 偶根fail指向奇根 奇根的长度为-1.
先判断以当前点之前有没有出现过回文串 然后 没有的话 就可以建点了 然后先找fail再把点安上去 防止自己找到自己。然后更新一下信息即可。
注意 这样做 我们可以非常显然的得到一个推论:一个长度为n的字符串的本质不同的回文串最多有n种 这个还是挺妙的。
const int MAXN=1000010;
int T,n;
int s[MAXN];char a[MAXN];
struct wy//PAM 咋写啊啊啊
{
int cnt,last,c[MAXN],cc[MAXN];
int fail[MAXN],len[MAXN];
int t[MAXN][26],pos[MAXN];
inline void cle()
{
cnt=1;last=1;
memset(t[0],0,sizeof(t[0]));
memset(t[1],0,sizeof(t[1]));
len[1]=-1;fail[0]=1;
len[0]=0;fail[1]=1;
}
inline int get_num()
{
++cnt;len[cnt]=fail[cnt]=0;
memset(t[cnt],0,sizeof(t[cnt]));
return cnt;
}
inline int get_fail(int x,int w)
{
while(s[w-len[x]-1]!=s[w])x=fail[x];
return x;
}
inline void insert(int x)
{
int w=get_fail(last,x);
if(!t[w][s[x]])
{
int ww=get_num();//创建新节点.
fail[ww]=t[get_fail(fail[w],x)][s[x]];
t[w][s[x]]=ww;c[ww]=c[fail[ww]]+1;
len[ww]=len[w]+2;cc[ww]=(cc[fail[ww]]+len[ww])%mod;
}
last=t[w][s[x]];
}
}A,B;
int main()
{
freopen("1.in","r",stdin);
freopen("1.out","w",stdout);
gt(T);
while(T--)
{
int ans=0;
gc(a);n=strlen(a+1);A.cle();B.cle();
s[0]=mod;rep(1,n,i)s[i]=a[i]-'a',A.insert(i),A.pos[i]=A.last;
s[0]=mod;fep(n,1,i)s[n-i+1]=a[i]-'a',B.insert(n-i+1),B.pos[i]=B.last;
//rep(1,n,i)cout<<A.len[A.pos[i]]<<endl;
//rep(1,n,i)cout<<B.cc[B.pos[i]]<<endl;
rep(1,n-1,i)
{
//计算左边i 右边i+1
int cnt1=(ll)(A.c[A.pos[i]]*(i+1)-A.cc[A.pos[i]])%mod;
int cnt2=((ll)B.c[B.pos[i+1]]*i+B.cc[B.pos[i+1]])%mod;
ans=(ans+(ll)cnt1*cnt2)%mod;
}
put((ans+mod)%mod);
}
return 0;
}
4.22 省选模拟赛 三元组 manacher 回文自动机的更多相关文章
- BZOJ 3676 [Apio2014]回文串 (后缀自动机+manacher/回文自动机)
题目大意: 给你一个字符串,求其中回文子串的长度*出现次数的最大值 明明是PAM裸题我干嘛要用SAM做 回文子串有一个神奇的性质,一个字符串本质不同的回文子串个数是$O(n)$级别的 用$manach ...
- 【洛谷比赛】[LnOI2019]长脖子鹿省选模拟赛 T1 题解
今天是[LnOI2019]长脖子鹿省选模拟赛的时间,小编表示考的不怎么样,改了半天也只会改第一题,那也先呈上题解吧. T1:P5248 [LnOI2019SP]快速多项式变换(FPT) 一看这题就很手 ...
- 省选算法学习-回文自动机 && 回文树
前置知识 首先你得会manacher,并理解manacher为什么是对的(不用理解为什么它是$O(n)$,这个大概记住就好了,不过理解了更方便做$PAM$的题) 什么是回文自动机? 回文自动机(Pal ...
- CF17E Palisection(manacher/回文树)
CF17E Palisection(manacher/回文树) Luogu 题解时间 直接正难则反改成求不相交的对数. manacher求出半径之后就可以差分搞出以某个位置为开头/结尾的回文串个数. ...
- @省选模拟赛03/16 - T3@ 超级树
目录 @description@ @solution@ @accepted code@ @details@ @description@ 一棵 k-超级树(k-SuperTree) 可按如下方法得到:取 ...
- 3.28 省选模拟赛 染色 LCT+线段树
发现和SDOI2017树点涂色差不多 但是当时这道题模拟赛的时候不会写 赛后也没及时订正 所以这场模拟赛的这道题虽然秒想到了LCT和线段树但是最终还是只是打了暴力. 痛定思痛 还是要把这道题给补了. ...
- [NOI P模拟赛] 传统艺能(子序列自动机、矩阵乘法,线段树)
(2:00)OID:"完了,蓝屏了!"(代码全消失) 众人欢呼 OID:开机,"原题测试--" (30min later)OID 开始传统艺能: " ...
- Best Reward---hdu3613(manacher 回文串)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3613 题意就是给你一个串s 然后求把s分成两部分之后的价值总和是多少,分开的串 如果是回文那么价值就是 ...
- 2015 UESTC Training for Search Algorithm & String - M - Palindromic String【Manacher回文串】
O(n)的复杂度求回文串:Manacher算法 定义一个回文值,字符串S是K重回文串,当且仅当S是回文串,且其长度为⌊N/2⌋的前缀和长度为⌊N/2⌋的后缀是K−1重回文串 现在给一个2*10^6长度 ...
随机推荐
- css实现自适应正方形的多种方法实现
方案一:CSS3 vw 单位 CSS3 中新增了一组相对于可视区域百分比的长度单位vw.vh.vmin.vmax.其中vw是相对于视口宽度百分比的单位,1vw = 1% viewport width, ...
- 深入理解letter-spacing,word-spacing的对比区别
letter-spacing lletter-spacing 属性增加或减少字符间的空白(字符间距). 该属性定义了在文本字符框之间插入多少空间.由于字符字形通常比其字符框要窄,指定长度值时,会调整字 ...
- MySQL CodeFirst的配置与注意事项
mysql+ef的配置相比较mssql+ef来说复杂一些.我的感受就是配置难度在于插件版本造成的各种不兼容问题.另外参考了很多博客,将多个博客里的经验综合才得以实现,因为不是每个人的操作都和那些博客作 ...
- 深入Mybatis源码——执行流程
前言 上一篇分析Mybatis是如何加载解析XML文件的,本篇紧接上文,分析Mybatis的剩余两个阶段:代理封装和SQL执行. 正文 代理封装 Mybatis有两种方式调用Mapper接口: pri ...
- 钉钉内置的浏览器怎么改变title
在我项目的开发过程当中,遇到过在钉钉打开的vue写的h5页面,通过在路由切换的时候通过全局的路由钩子函数改变 document.title 的内容失效的问题. const routes = [ { p ...
- 重学 Java 设计模式:实战访问者模式「模拟家长与校长,对学生和老师的不同视角信息的访问场景」
作者:小傅哥 博客:https://bugstack.cn - 原创系列专题文章 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 能力,是你前行的最大保障 年龄会不断的增长,但是什么才能让你不 ...
- 深入浅出AQS源码解析
最近一直在研究AQS的源码,希望可以更深刻的理解AQS的实现原理.虽然网上有很多关于AQS的源码分析,但是看完以后感觉还是一知半解.于是,我将自己的整个理解过程记录下来了,希望对大家有所帮助. 基本原 ...
- web测试中不容忽视的细节
最近在自动化测试的圈子里,我总是碰到很多人在群里和其他地方问为什么这个会出现错误? 为什么这个运行不了?为什么我百度了还是没用? 其实真正的原因可能是你忽略了下面这些需要注意的小地方: 1.页面分辨率 ...
- 【JVM之内存与垃圾回收篇】JVM与Java体系结构
JVM与Java体系结构 前言 作为Java工程师的你曾被伤害过吗?你是否也遇到过这些问题? 运行着的线上系统突然卡死,系统无法访问,甚至直接OOMM! 想解决线上JVM GC问题,但却无从下手. 新 ...
- scrapyd+gerapy的项目部署
scrapyd+gerapy的项目部署: 简单学习,后续跟进完善 声明: 1)仅作为个人学习,如有冒犯,告知速删! 2)不想误导,如有错误,不吝指教! 环境配置: scrapyd下载: pip ins ...