Codeforces 17E Palisection - Manacher】的更多相关文章

题目传送门 传送点I 传送点II 传送点III 题目大意 给定一个串$s$询问,有多少对回文子串有交. 好像很简单的样子. 考虑能不能直接求,感觉有点麻烦.因为要考虑右端点在当前回文子串内还有区间包含问题. 那么考虑补集转化.问题转化成,考虑当前的回文串,之前有多少个回文串与它不相交. 跑一遍Manacher.然后先差分再二阶前缀和求出以第$i$个位置为右端点的回文子串的个数.然后再求一次前缀和就可以了. 然后再扫一遍就做完了. Code /** * Codeforces * Problem#1…
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结尾的字符串,在他后面与他不相交的就是以这个位置为结尾的个数和以这个位置以后为开头的乘积. 而答案就是总回文串个数sum*(sum-1)/2减去不相交个数 提到回文串,我们会想到manacher,但是这求出来的是中心的回文串最长半径,怎么转换成结尾和开头的个数呢? 对于已知位置i和以i为中心的回文串最长半径a[i],显然从i-a[i]到i都可以作为一个回文串的开头,i…
CF17E Palisection(manacher/回文树) Luogu 题解时间 直接正难则反改成求不相交的对数. manacher求出半径之后就可以差分搞出以某个位置为开头/结尾的回文串个数. 然后就容易求出不相交的对数,用总数减去即为答案. 啊是的这题好像也可以用回文树做. #include<bits/stdc++.h> using namespace std; namespace RKK { const int N=4000011,mo=51123987; void doadd(in…
Codeforces 17 E 题意:给一个串,求其中回文子串交叉的对数. 思路1:用哈希解决.首先求出每个点左右最长的回文串(要分奇数长度和偶数长度),然后记录经过每个点的回文串的个数,以及它们是在回文串的前半段还是后半段(代表着对于当前节点这个回文串是刚刚覆盖到它还是将要消亡),然后到每个节点的时候将新经过当前这个节点的回文串两两配对,并且将经过当前这个节点但没有消亡的回文串与新经过当前这个节点的回文串配对,更新经过当前节点的回文串. 思路2:用回文树解决.在回文树中记录在每个节点结束的回文…
题面:洛谷(带翻译) 题解: 直接求相交不太好求,所以考虑求不相交的回文串对数. 设ll[i]表示以i为开头的回文串个数,rr[i]表示结尾<=i的回文串个数. 然后不相交的回文串对数显然就是对于每个$rr[i - 1] \cdot ll[i]$求一次和. 最后再用全集减去不相交的回文串对数即可求出相交的回文串对数. 那么如何求这2个数组呢? 对于每个最长回文半径r[i],它可以对一个区间做出贡献,即以它为中心那些回文串的开头or结尾都在一个区间内,相当于每个r[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…
Codeforces 7E #include <iostream> #include <cstring> #include <cstdio> #include <algorithm> #include <map> using namespace std; map<string,int> Map; int KASE; string Str,t; ]; inline int Get(int l,int r) { ; ;i>=l;i-…
URAL - 1960   Palindromes and Super Abilities 回文树水题,每次插入时统计数量即可. #include<bits/stdc++.h> using namespace std; #define eps 1e-9 #define For(i,a,b) for(int i=a;i<=b;i++) #define Fore(i,a,b) for(int i=a;i>=b;i--) #define lson l,mid,rt<<1 #d…