CF17E Palisection】的更多相关文章

CF17E Palisection(manacher/回文树) Luogu 题解时间 直接正难则反改成求不相交的对数. manacher求出半径之后就可以差分搞出以某个位置为开头/结尾的回文串个数. 然后就容易求出不相交的对数,用总数减去即为答案. 啊是的这题好像也可以用回文树做. #include<bits/stdc++.h> using namespace std; namespace RKK { const int N=4000011,mo=51123987; void doadd(in…
题意翻译 给定一个长度为n的小写字母串.问你有多少对相交的回文子 串(包含也算相交) . 输入格式 第一行是字符串长度n(1<=n<=2*10^6),第二行字符串 输出格式 相交的回文子串个数%51123987 题解 首先,我们要知道一个串有多少个回文串. 1.manacher, 枚举回文中心可以计算出所有的回文串个数 (i+p[i]-1)-(i-p[i]+1)+1 然后我们怎么知道多少相交的回文串呢?计数问题要转化成有分界点的问题,便于利用乘法加法原理等.——lyd 这个相交显然不好处理,也…
题目大意: 给定一个串$S$,询问有多少对相交的回文子串 直接做的办法: 我们先考虑求出以$i$为结尾的串的数量,这个很好统计 之后,我们再求出所有包含了点$i$的回文串的数目 这个相当于在$i$的左边加上一个等差数列,右边同理可以统计出来 二次差分后维护这些东西就可以做到$O(n)$ 听起来就很难打.... 考虑反面 求出所有不相交的回文子串对的数目 只需要求出所有的回文串的数目 以及以点$i$为开头的串的数目,和以点$1 ... i - 1$为结尾的串的数目 这两个也十分统计 $O(n)$即…
题意 给定一个长度为n的小写字母串.问你有多少对相交的回文子串(包含也算相交) 相交的回文子串个数 \(mod\ 51123987\) Sol 求相交的回文子串不太好求 考虑用总数减去不相交的回文串个数 那么考虑求以一个点结尾的后缀回文串的贡献: 就是以它后面的点为开头的前缀回文串的个数 正反两遍回文树求一下就好了 # include <bits/stdc++.h> # define IL inline # define RG register # define Fill(a, b) mems…
题面:洛谷(带翻译) 题解: 直接求相交不太好求,所以考虑求不相交的回文串对数. 设ll[i]表示以i为开头的回文串个数,rr[i]表示结尾<=i的回文串个数. 然后不相交的回文串对数显然就是对于每个$rr[i - 1] \cdot ll[i]$求一次和. 最后再用全集减去不相交的回文串对数即可求出相交的回文串对数. 那么如何求这2个数组呢? 对于每个最长回文半径r[i],它可以对一个区间做出贡献,即以它为中心那些回文串的开头or结尾都在一个区间内,相当于每个r[i]都可以对某个区间做区间加.…
题意翻译 给定一个长度为n的小写字母串.问你有多少对相交的回文子 串(包含也算相交) . 输入格式 第一行是字符串长度n(1<=n<=2*10^6),第二行字符串 输出格式 相交的回文子串个数%51123987 题解 直接判断相交的回文串很难 那我们考虑找出所有不相交的回文串 数量就是所有以$i$结尾的回文串数乘以$i$后面的回文串数 以$i$结尾的回文串数就是在fail树里$i$的深度 然后$i$后面的回文串数只要倒着做一遍再记录一个后缀和就好了 然后记$sum$为总共的回文串数,回文串对数…
题目传送门 题目大意:给你一个字符串,让你求出有多少对相交的回文子串 啊啊啊啊降智了,我怎么又忘了正难则反! 求相交会很难搞.把问题转化成求互不相交的回文子串再减一下就行了 先利用$PAM$求出以每个位置为末尾的回文子串数量,这个数量就是此时构造末尾节点在$fail$树中的深度 再把串翻过来,用同样的方法求出每个位置为开头的回文子串数量 对其中一个数组求前缀和,用乘法原理算一下就行了 空间开不下怎么办?以时间换空间,用邻接表存儿子!每次跳儿子都暴力遍历一次邻接表 #include <cstdio…
题意 给出一个长度为N的字符串S,问S中有多少个回文子串对(i,j)使得i,j在S中的位置相交?(N<=2*106) 题解 #include<iostream> #include<cstring> #include<cstdio> #include<cmath> #include<algorithm> using namespace std; ; ; ],str[N*]; ],n,m,f[N*],g[N*],sum,ans,tot,num;…
题意翻译 给定一个长度为n的小写字母串.问你有多少对相交的回文子 串(包含也算相交) . 输入格式 第一行是字符串长度n(1<=n<=2*10^6),第二行字符串 输出格式 相交的回文子串个数%51123987 Translated by liyifeng 题目描述 In an English class Nick had nothing to do at all, and remembered about wonderful strings called palindromes. We sh…
回文树(也就是回文自动机)实际上是奇偶两棵树,每一个节点代表一个本质不同的回文子串(一棵树上的串长度全部是奇数,另一棵全部是偶数),原串中每一个本质不同的回文子串都在树上出现一次且仅一次. 一个节点的fail指针指向它的最长回文后缀(不包括自身,所有空fail均连向1).归纳容易证明,当在原串末尾新增一个字符时,回文树上至多会新增一个节点,这也证明了一个串本质不同的回文子串个数不会超过n. 建树时采用增量构造法,当考虑新字符s[i]时,先找到以s[i-1]为结尾的节点p,并不断跳fail.若代表…
回文树学习博客:lwfcgz    poursoul 边写边更新,大概会把回文树总结在一个博客里吧... 回文树的功能 假设我们有一个串S,S下标从0开始,则回文树能做到如下几点: 1.求串S前缀0~i内本质不同回文串的个数(两个串长度不同或者长度相同且至少有一个字符不同便是本质不同) 2.求串S内每一个本质不同回文串出现的次数 3.求串S内回文串的个数(其实就是1和2结合起来) 4.求以下标i结尾的回文串的个数 每个变量的含义 1.len[i]表示编号为i的节点表示的回文串的长度(一个节点表示…
PAM 目录 PAM 功能: 回文树 Fail指针 Trans指针 构建PAM 应用 P5496[模板]回文自动机(PAM) P4287[SHOI2011]双倍回文 P4555[国家集训队]最长双回文串 P4762[CERC2014]Virus synthesis P1659[国家集训队]拉拉队排练 CF17E Palisection 注意:邻接链表PAM不是使空间变小了,而是用时间换空间 回文自动机 建议先学习AC自动机:AC自动机讲解超详细 回文自动机,顾名思义,用来处理回文串的自动机. 功…
[CF17E]Palisection(回文树) 题面 洛谷 题解 题意: 求有重叠部分的回文子串对的数量 所谓正难则反 求出所有不重叠的即可 求出以一个位置结束的回文串的数量 和以一个位置为开始的回文串的数量 然后对应的乘一下就行了 求法我用的是回文树 维护每个节点到根节点的距离, 就是回文后缀的数量 CF上的空间是\(128MB\) 卡的很 所以所有的连边考虑用邻接表来代替 #include<iostream> #include<cstdio> #include<cstdl…
Palisection(CF-17E) - 竞赛题解 Manacher学到一定程度,也需要练一下有趣的题了-- (这是多老的题了 \(QwQ\))[传送门] 『题意』 给出一个字符串,求总共有多少对不同的(只要位置不同)回文子串有重叠. 举个例子(样例):"babb" 有 "bab"(0~2) , "b"(0) , "a"(1) , "b"(2) , "b"(3) , "bb&…
https://vjudge.net/problem/CodeForces-17E http://codeforces.com/problemset/problem/17/E 题目大意:给一个长度为n的字符串,求不相交的回文串对数. ———————————————————————————— 点击这里看大佬的题解. #include<cstdio> #include<cstring> #include<algorithm> #define N 2000010 #defin…
卡空间PAM,2010没有PAM,所以都是马拉车 众所周知,PAM拥有十分优秀的时间复杂度,但空间复杂度lj得不行 但这题卡空间,所以得用到邻接链表PAM 先讲思路 题目要求相交的回文子串对,这很难做 于是我们求补集,求不相交的回文子串对,再用总数减即可 求法和上文的最长双回文子串 类似 正反建一次PAM,存该位置结尾的回文子串个数,然后加法改乘法 自己领悟一下,挺简单的. 现在讲一下邻接链表PAM 注意:邻接链表PAM不是使空间变小了,而是用时间换空间 我们记边结构体\(line\) 存\(3…
E. Palisection time limit per test 2 seconds memory limit per test 128 megabytes input standard input output standard output In an English class Nick had nothing to do at all, and remembered about wonderful strings called palindromes. We should remin…
Codeforces 17E Palisection E. Palisection In an English class Nick had nothing to do at all, and remembered about wonderful strings called palindromes. We should remind you that a string is called a palindrome if it can be read the same way both from…
E. Palisection time limit per test 2 seconds memory limit per test 128 megabytes input standard input output standard output In an English class Nick had nothing to do at all, and remembered about wonderful strings called palindromes. We should remin…
题目传送门 传送点I 传送点II 传送点III 题目大意 给定一个串$s$询问,有多少对回文子串有交. 好像很简单的样子. 考虑能不能直接求,感觉有点麻烦.因为要考虑右端点在当前回文子串内还有区间包含问题. 那么考虑补集转化.问题转化成,考虑当前的回文串,之前有多少个回文串与它不相交. 跑一遍Manacher.然后先差分再二阶前缀和求出以第$i$个位置为右端点的回文子串的个数.然后再求一次前缀和就可以了. 然后再扫一遍就做完了. Code /** * Codeforces * Problem#1…
Codeforces 17 E 题意:给一个串,求其中回文子串交叉的对数. 思路1:用哈希解决.首先求出每个点左右最长的回文串(要分奇数长度和偶数长度),然后记录经过每个点的回文串的个数,以及它们是在回文串的前半段还是后半段(代表着对于当前节点这个回文串是刚刚覆盖到它还是将要消亡),然后到每个节点的时候将新经过当前这个节点的回文串两两配对,并且将经过当前这个节点但没有消亡的回文串与新经过当前这个节点的回文串配对,更新经过当前节点的回文串. 思路2:用回文树解决.在回文树中记录在每个节点结束的回文…
建回文树. 正反建统计一种前缀和求出所有不相交的,用总数减去就是答案数. 在这里我们可以知道一个字符串中所有回文串的个数即为num数组之和(因为以一个节点为回文串结尾的字串都是唯一的) 也可以是cnt数组的和(想想看为什么) 题目链接:http://www.tsinsen.com/ViewGProblem.page?gpid=A1393 来源是Codeforces17E,但这样会MLE所以可以使用Vector替代next数组(时间换空间)这里不给出代码. By:大奕哥 #include<bits…
原题 题目要求相交的回文串对数,这显然非常难,但是要有一种正难则反的心态,求不出来相交的,求出来不相交的不就好了! 对于每以位置i结尾的字符串,在他后面与他不相交的就是以这个位置为结尾的个数和以这个位置以后为开头的乘积. 而答案就是总回文串个数sum*(sum-1)/2减去不相交个数 提到回文串,我们会想到manacher,但是这求出来的是中心的回文串最长半径,怎么转换成结尾和开头的个数呢? 对于已知位置i和以i为中心的回文串最长半径a[i],显然从i-a[i]到i都可以作为一个回文串的开头,i…
In an English class Nick had nothing to do at all, and remembered about wonderful strings called palindromes. We should remind you that a string is called a palindrome if it can be read the same way both from left to right and from right to left. Her…
题目链接 传送门 题意 给你一个串串,问你有多少对回文串相交. 思路 由于正着做不太好算答案,那么我们考虑用总的回文对数减去不相交的回文对数. 而不相交的回文对数可以通过计算以\(i\)为右端点的回文串的个数\(\times\)以\(i+1,i+2\dots,n\)为左端点的回文串的个数计算得到. 以\(i\)为右端点的回文串的个数可以直接用回文树\(O(n)\)求出来,以\(i\)为左端点的回文串的个数反着求一遍即可. 不过要注意本题由于数据范围比较大,使用邻接矩阵会导致\(MLE\),因此需…
[题解]Palindrome pairs [Codeforces159D] 传送门:\(Palindrome\) \(pairs\) \([CF159D]\) [题目描述] 给定一个长度为 \(N\) 的字符串 \(S\),求有多少四元组 \((l_1,r_1,l_2,r_2)\) 满足 \(1 \leqslant l_1 \leqslant r_1 \leqslant l_2 \leqslant r_2 \leqslant N\) 且 \(S[l1...r1],\) \([Sl2...r2]\…
Manacher以及回文树算法学习 一.Manacher 关于\(Manacher\),这篇博客 讲的很清楚. 大致总结一下 为了将长度为奇数的回文串和长度为偶数的回文串一起考虑,需要在原字符串中插入间隔字符,首尾也需要,处理后字符串长度为\(2 * len + 1\) \(Manacher\)算法用一个辅助数组\(Len[i]\)表示以字符\(T[i]\)为中心的最长回文字串的最右字符到T[i]的长度,比如以\(T[i]\)为中心的最长回文字串是\(T[l,r]\),那么\(Len[i]=r-…
CF149E 题意:给出一个长度为n的文本串和m个模式串,求有多少个模式串可以拆成两半,使得这两半按顺序匹配(n<=2e5,m<=100) 最暴力的想法就是对于每个询问串,全部和原串做一遍kmp,求出每个前缀/后缀在原串中被匹配到的最前/最后位置,但这样对于每组询问都需要遍历文本串一遍 可以考虑对文本串建立SAM,对于每个节点我们可以求出其endpos中的最小值,然后对于每组询问串,直接在SAM上走即可 时间复杂度\(O(n+\sum |T| )\) CF223B 题意:给你两个字符串S,T.…
写题遇上一棘手的题,[Apio2014]回文串,一眼看过后缀数组+Manacher.然后就码码码...过是过了,然后看一下[Status],怎么慢这么多,不服..然后就搜了一下,发现一种新东西——回文树. 回文树的功能: 假设我们有一个串S,S下标从0开始,则回文树能做到如下几点: 1.求串S前缀0~i内本质不同回文串的个数(两个串长度不同或者长度相同且至少有一个字符不同便是本质不同) 2.求串S内每一个本质不同回文串出现的次数 3.求串S内回文串的个数(其实就是1和2结合起来) 4.求以下标i…