Description 如果一个字符串可以被拆分为 AABBAABB 的形式,其中 AA 和 BB 是任意非空字符串,则我们称该字符串的这种拆分是优秀的.例如,对于字符串 aabaabaa,如果令 A=aabA=aab,B=aB=a,我们就找到了这个字符串拆分成 AABBAABB 的一种方式.一个字符串可能没有优秀的拆分,也可能存在不止一种优秀的拆分.比如我们令 A=aA=a,B=baaB=baa,也可以用 AABBAABB 表示出上述字符串:但是,字符串 abaabaa 就没有优秀的拆分.现在…
Time Limit: 30 Sec  Memory Limit: 512 MB Description 如果一个字符串可以被拆分为 AABBAABB 的形式,其中 AA 和 BB 是任意非空字符串,则我们称该字符串的这种拆分是优秀的.例如,对于字符串 aabaabaa,如果令 A=aabA=aab,B=aB=a,我们就找到了这个字符串拆分成 AABBAABB 的一种方式.一个字符串可能没有优秀的拆分,也可能存在不止一种优秀的拆分.比如我们令 A=aA=a,B=baaB=baa,也可以用 AAB…
BZOJ 洛谷 令\(st[i]\)表示以\(i\)为开头有多少个\(AA\)这样的子串,\(ed[i]\)表示以\(i\)结尾有多少个\(AA\)这样的子串.那么\(Ans=\sum_{i=1}^{n-1}ed[i]*st[i+1]\). 考虑如何求\(st[i],ed[i]\).暴力的话可以枚举\(i\),然后哈希判一下.这样\(O(n^2)\)就有\(95\)分了.. 正解是,枚举长度\(len\),判断每个位置是否存在长为\(2*len\)的\(AA\)这样的子串. 每隔\(len\)的…
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=4650 题意: 给你一个字符串s,问你s及其子串中,将它们拆分成"AABB"的方式共有多少种. 题解: 先只考虑"AA"的形式. 设pre[i]表示以s[i]结尾的"AA"串共有多少个,nex[i]表示以s[i]开头的"AA"串共有多少个. 那么拆分成"AABB"的总方案数 = ∑ pre[i]*ne…
我们只需要统计在某一个点开始的形如$AA$字符串个数,和结束的个数相乘求和. 首先枚举循环节的长度L.即$\mid (A) \mid=L$ 然后肯定会经过s[i]和[i+L]至少两个点. 然后我们可以枚举,然后求出循环节循环的次数.起点.终点,然后发现答案更新是一段$+1$的操作, 然后就可以用差分的思想更新即可. #include <map> #include <cmath> #include <queue> #include <cstdio> #incl…
[NOI2016]优秀的拆分 https://www.lydsy.com/JudgeOnline/problem.php?id=4650 题解 如果我们能够统计出一个数组a,一个数组b,a[i]表示以i为结尾的AA串个数,b[i]表示以i开头的AA串个数,我们就可以O(n)的统计答案了. 我们开看这么一个算法. 先枚举A的长度len,然后按照A的长度把序列分成很多段,每段有一个代表点即这一段的第一个点. 然后枚举所有代表点l,再枚举r=l+len,求一下(1,l)和(1,r)的最长公共后缀,(l…
[BZOJ4560][NOI2016]优秀的拆分 题面 bzoj 洛谷 题解 考虑一个形如\(AABB\)的串是由两个形如\(AA\)的串拼起来的 那么我们设 \(f[i]\):以位置\(i\)为结尾的形如\(AA\)串的个数 \(g[i]\):以位置\(i\)为开头的形如\(AA\)串的个数 \[ \therefore Ans=\sum_{i=1}^nf[i]*g[i+1] \] 题目的难点转化为求\(f,g\). 但是,其实我们只要\(O(n^2)\)暴力求一下就有\(95pts\)了, 所…
luogu1117 [NOI2016]优秀的拆分 https://www.luogu.org/problemnew/show/P1117 后缀数组我忘了. 此题哈希可解决95分(= =) 设\(l_i\)表示以i结尾的形如"AA"串的个数,\(r_i\)表示以i+1开头的形如"AA"串的个数. 则答案为 \(\sum l_i r_i\) 先\(O(n)\)hash预处理,然后\(O(n^2)\)处理出\(l,r\)数组 最后5分靠肮脏的打表 单哈希快,双哈希稳 这里…
[UOJ#219][BZOJ4650][Noi2016]优秀的拆分 试题描述 如果一个字符串可以被拆分为 AABBAABB 的形式,其中 A 和 B 是任意非空字符串,则我们称该字符串的这种拆分是优秀的.例如,对于字符串 aabaabaa,如果令 A=aab,B=a,我们就找到了这个字符串拆分成 AABBAABB 的一种方式.一个字符串可能没有优秀的拆分,也可能存在不止一种优秀的拆分.比如我们令 A=a,B=baa,也可以用 AABBAABB 表示出上述字符串:但是,字符串 abaabaa 就没…
[NOI2016]优秀的拆分 题目描述 如果一个字符串可以被拆分为 \(AABB\) 的形式,其中 A和 B是任意非空字符串,则我们称该字符串的这种拆分是优秀的. 例如,对于字符串 \(aabaabaa\) ,如果令 \(A=aab\) , \(B=a\) ,我们就找到了这个字符串拆分成 \(AABB\) 的一种方式. 一个字符串可能没有优秀的拆分,也可能存在不止一种优秀的拆分.比如我们令 \(A=a\) , \(B=baa\) ,也可以用 \(AABB\) 表示出上述字符串:但是,字符串 \(…