[XSY3320] string (AC自动机,哈希,点分治)

XSY3320

前置芝士:回文前缀&&borderborderborder
推荐博客
推荐博客

考虑点分治,问题变成求经过重心的回文路径个数。
一条经过重心的回文路径长这样:
在这里插入图片描述

xxxzzz的串与yyyrootrootroot的串相同。

建出根到每个节点对应的串的AC自动机,并在failfailfail树上找出每个串的回文前缀。判断根到某个节点对应的串是不是回文串可以用哈希解决。

根据borderborderborder理论,一个回文串的所有回文前缀的长度可以组成一个不超过O(logn)O(logn)O(logn)项的等差数列。即若TkT_kTk是回文串,TkT_kTk的最长回文真前缀是Tk−1T_{k-1}Tk1Tk−1T_{k-1}Tk1的最长回文真前缀是Tk−2T_{k-2}Tk2,…,T2T_2T2的最长回文真前缀是T1T_1T1,那么有∣Ti∣=∣Ti−1∣+d|T_i|=|T_{i-1}|+dTi=Ti1+dddd为公差)。

考虑一个点作为xxx的贡献。设根到xxx对应的串为UUUUUU在AC自动机上对应点XXX。把UUU的最长回文真前缀看成TkT_kTk,那么TiT_iTi作为回文串TTT时,我们要查询有多少个点yyy,满足根到yyy对应的串是UUU的后缀,且长度为∣U∣−∣Ti∣=∣U∣−∣T1∣−(i−1)d|U|-|T_i|=|U|-|T_1|-(i-1)dUTi=UT1(i1)d,记有num[i]num[i]num[i]个符合条件的yyy。那么最后这个xxx的贡献就是∑i=1knum[i]\sum_{i=1}^{k}num[i]i=1knum[i],换句话说,我们要求有多少个点yyy,满足根到yyy对应的串是UUU的后缀,且长度lenlenlen符合:len≡∣U∣−∣T1∣(modd),∣U−T1∣≤len≤∣U∣−∣Tk∣len\equiv|U|-|T_1|(\mod d),|U-T_1|\leq len\leq |U|-|T_k|lenUT1(modd),UT1lenUTk

UUU的后缀,即XXXfailfailfail树上的祖先对应的串。我们对failfailfaildfsdfsdfs,同时开一个数组ci,jc_{i,j}ci,j 记录当前节点有多少个祖先(包括自己),满足该祖先代表的串的长度 modi=j\mod i=jmodi=j

那么最终贡献就是dfsdfsdfs到的点代表的串长为∣U∣−∣Tk∣|U|-|T_k|UTkcd,(∣U∣−∣T1∣)moddc_{d,(|U|-|T_1|)\mod d}cd,(UT1)modd的值 减去 dfsdfsdfs到的点代表的串长为∣U∣−∣T1∣−d|U|-|T_1|-dUT1dcd,(∣U∣−∣T1∣)moddc_{d,(|U|-|T_1|)\mod d}cd,(UT1)modd的值。

但这样空间复杂度是O(n2)O(n^2)O(n2)的,所以我们考虑分块,只开到c[n][n]c[\sqrt{n}][\sqrt{n}]c[n][n]的大小,对于公差大于n\sqrt{n}n的,我们暴力跳failfailfail寻找答案。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/320010.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【期望】守卫挑战(金牌导航 期望-9)

守卫挑战 金牌导航 期望-9 题目大意 有n个数,到第i个数,有p_i的概率选择这个数,问你最后选了最少L个数,且选的数的和再加k大于等于0 样例输入 3 1 0 10 20 30 -1 -1 2样例输出 0.300000数据范围 0⩽k⩽20000\leqslant k\leq…

xinjun与阴阳师

来源:牛客网 文章目录题目描述题解:代码:题目描述 xinjun是各类手游的狂热粉丝,因随手一氪、一氪上千而威震工大,现在他迷上了阴阳师。xinjun玩手游有一个习惯,就是经过层层计算制定出一套方案来使操作利益…

P3311-[SDOI2014]数数【AC自动机,dp】

正题 题目链接:https://www.luogu.com.cn/problem/P3311 题目大意 求一个不超过nnn的数字使其不包含任何sss集合中的数字串。 解题思路 很经典的ACACAC自动机上面dpdpdp,但是因为是数字所以要来点数位dpdpdp的东西,多开一维用0/10/10/1表示是否在上界…

如何在 ASP.Net Core 中使用 Consul 来存储配置

原文: USING CONSUL FOR STORING THE CONFIGURATION IN ASP.NET CORE作者: Nathanael[译者注:因急于分享给大家,所以本文翻译的很仓促,有些不准确的地方还望谅解]来自 Hashicorp 公司的 Consul 是一个用于分布式架构的工具,可以用…

[XSY3381] 踢罐子(几何)

XSY3381 点被选为点对之一的贡献我们单独计算(这部分贡献的总和为4n(n−1)(n−2)4n(n-1)(n-2)4n(n−1)(n−2))。接下来只讨论剩余部分的贡献。 先把任意三个点构成的六种选择方案合并,发现在外接圆周和弦之间的点每个有2的贡献,…

GDKOI2021总结

前言 因为疫情的原因,以学校为单位在校参加!(就很秃然) 注:前三天是普及组,后三天是提高组 Day 1 第一次参加,以为会被虐得成狗,以忐忑的心情打开T1 4⩽n⩽20004\leqslant n\leqs…

The Bottom of a Graph Poj 2553

牛客网 poj 2553 文章目录Description题意:题解:代码:Description We will use the following (standard) definitions from graph theory. Let V be a nonempty and finite set, its elements being called vertices (or nodes). Let E be …

P7244-章节划分【RMQ,贪心,递归】

正题 题目链接:https://www.luogu.com.cn/problem/P7244?contestId38911 题目大意 nnn个数字,分成连续非空的kkk段要求每一段的最大值的gcdgcdgcd最大。 解题思路 首先答案一定是最大值的约数,这些数不多我们可以枚举这些数xxx。然后我们称xxx的倍数的…

[XSY3382] 专家系统(二分+线段树)

XSY3382 二分ccc,问题变成能否用一个长ccc宽ccc的矩形框住至少kkk个点。 二维数点问题考虑用扫描线解决。将所有点按照xxx从小到大排序。 枚举一段xxx坐标相差不超过ccc的点(双指针推进),初始想法是根据这些点的yyy值建一棵权值…

关于.NET Core是否应该支持WCF Hosting的争论

本文要点本文试图回答“.NET Core 是否应该支持 Windows 通信基础(WCF) Hosting?”的问题;支持者论据:许多工程师喜欢把 WCF 作为一种编程模型,不希望因为迁移到 .NET Core 而产生(机会成本&…

战争尾声(nowcoder 215073)

战争尾声 nowcoder 215073 题目大意 在平面直角坐标系(x,y范围均为1~200)上,给你n个点,让你找到一个点,使其到所有点直线距离相等(答案坐标均为整数) 输入样例#1 2 1 2 2 1输出样例#1 1 1…

HDU1269 迷宫城堡(模板题)

HDU1269 迷宫城堡 文章目录Problem Description题解&#xff1a;Problem Description 为了训练小希的方向感&#xff0c;Gardon建立了一座大城堡&#xff0c;里面有N个房间(N<10000)和M条通道(M<100000)&#xff0c;每个通道都是单向的&#xff0c;就是说若称某通道连通…

照看小猫(nowcoder 217602)

照看小猫 nowcoder 217602 题目大意 有n只小猫&#xff0c;对于第i只小猫&#xff0c;给它取一个以小写字母组成的名字&#xff08;长度不大于aia_iai​&#xff09;&#xff0c;问你使所有小猫名字不同的方案数 样例#1 输入样例#1 1 1输出样例#1 26样例解释#1 猫咪的名…

AT3955-[AGC023D]Go Home【结论,递归】

正题 题目链接:https://www.luogu.com.cn/problem/AT3955 题目大意 nnn个房子在一个坐标轴上&#xff0c;第iii个有pip_ipi​个人在位置xix_ixi​&#xff0c;开始所有人都在一辆在位置sss的车上&#xff0c;每一时刻&#xff0c;每个人都会投票决定车的走向&#xff0c;票多的…

[XSY3383]多线程(笛卡尔树,DP)

%%%tjytjytjy的笛卡尔树做法&#xff1a; 设dp(l,r,Amin,Bmin)dp(l,r,Amin,Bmin)dp(l,r,Amin,Bmin)为把c[l],c[l1],...,c[r]c[l],c[l1],...,c[r]c[l],c[l1],...,c[r]划到A,BA,BA,B两线程中&#xff0c;且划到AAA线程的数>Amin>Amin>Amin&#xff0c;划到BBB线程的数&…

ASP.NET Core 2.0使用Autofac实现IOC依赖注入竟然能如此的优雅简便

初识ASP.NET Core的小伙伴一定会发现&#xff0c;其几乎所有的项目依赖都是通过依赖注入方式进行链式串通的。这是因为其使用了依赖注入 (DI) 的软件设计模式&#xff0c;代码的设计是遵循着“高内聚、低耦合”的原则&#xff0c;使得各个类与类之间的关系依赖于接口&#xff0…

POJ1236 Network of Schools

POJ1236 Network of Schools 文章目录Description题意&#xff1a;题解&#xff1a;代码&#xff1a;Description A number of schools are connected to a computer network. Agreements have been developed among those schools: each school maintains a list of schools t…

【模拟】签订协议(nowcoder 217601)

签订协议 nowcoder 217601 题目大意 给出n个数&#xff0c;现在有一个协议书&#xff0c;让你从1传到n&#xff0c;然后传回1&#xff0c;继续传下去 对于第i个数&#xff0c;如果前面i-1个数已经匹配过了&#xff0c;那么当协议书传过来时即可匹配&#xff0c;否则无法匹配…

P4196-[CQOI2006]凸多边形/[模板]半平面交【计算几何】

正题 题目链接:https://www.luogu.com.cn/problem/P4196 题目大意 给出nnn个凸多边形&#xff0c;求它们交的面积。 解题思路 就是把凸多边形上每条边作为一个半平面限制然后求一遍半平面交就好了。 具体做法是我们先将点按照级角排序&#xff0c;然后以此把半平面加入双端…

连续段问题小结

一个好用的工具——析合树 oi-wiki 例题 CF526F 题意&#xff1a; 给出一个1~nnn的排列&#xff0c;问有多少个区间的值域是连续的。 题解&#xff1a; 线段树单调栈做法 分治做法 析合树做法 图论做法 CF997E 题意&#xff1a; 给出一个1~nnn的排列&#xff0c;有qqq次…