题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4650 https://www.luogu.org/problemnew/show/P1117 和 bzoj2119 股市的预测 一样. 考虑算出每个点往前的 AA 的个数和往后的 BB 的个数,每个点作为 AA 和 BB 分界点的答案累加起来就行. 算一个点开始的 AA 的个数,就是枚举 A 的长度 L ,然后每 L 个分为一段,在段的开头求 LCP 和 LCS ,给合法的位置区间加1就行…
题目: 洛谷1117 分析: 定义把我校某兔姓神犇Tzz和他的妹子拆分,为"优秀的拆分" 随便写个哈希就能有\(95\)分的好成绩-- 我的\(95\)分做法比fei较chang奇葩,不想浪费时间的可以忽略解法一qwq 解法一: 用\(n\)个vector记录对于每个点\(i\),哪些长度\(len\)满足\(i+2len\leq n\)且\(str[i, i+len)=str[i+len,i+2len)\)(即形如"\(AA\)").然后,枚举开头\(l\)和&q…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2119 就是找差分序列上中间差 m 的相等的两段. 考虑枚举这样一段的长度 L .可以把序列分成 \( \frac{n}{L} \) 段:令 L , 2L , ... 这样的位置为关键点,那么每个关键点 i 求一下 LCP( i , i+L+m ) 和 LCS( i , i+L+m ) ,就能知道过这个关键点的左端点的合法范围.用 lst 记录上一个关键点算出的右端点来去重即可. 这样是 n…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4650 https://www.luogu.org/problemnew/show/P1117 枚举每一段 a 的长度,然后分块,后缀数组求出每一块首关键点附近的可行范围: 然后用线段树区间加,区间查询: 在开头范围查询结尾,就得到长度 <= 当前长度 d 的前半部分接上长度 = d 的后半部分的答案: 在结尾范围查询开头,就得到长度 = d 的前半部分接上长度 < d 的后半部分的答案,…
真是一个三倍经验好题啊. 我们来观察这个题目,首先如果直接整体计算,怕是不太好计算. 首先,我们可以将每个子串都看成一个后缀的的前缀.那我们就可以考虑一个一个后缀来计算了. 为了方便起见,我们选择按照字典序来一次插入每个后缀,然后每次考虑当前后缀会产生的新串和与之前插入的串重复的串(这里之所以可以这么考虑,是因为如果他会对后面的串产生重复的话,那么会在后面那个串加入的时候计算的) 那么我们考虑,一个排名为\(i\)的后缀,插入之后不考虑重复的话,会新增多少个子串呢? 不难发现是\(n-sa[i]…
[BZOJ 3039&洛谷P4147]玉蟾宫 Description 有一天,小猫rainbow和freda来到了湘西张家界的天门山玉蟾宫,玉蟾宫宫主蓝兔盛情地款待了它们,并赐予它们一片土地. 这片土地被分成N*M个格子,每个格子里写着'R'或者'F',R代表这块土地被赐予了rainbow,F代表这块土地被赐予了freda. 现在freda要在这里卖萌...它要找一块矩形土地,要求这片土地都标着'F'并且面积最大. 但是rainbow和freda的OI水平都弱爆了,找不出这块土地,而蓝兔也想看f…
洛谷P1712 [NOI2016]区间 noi2016第一题(大概是签到题吧,可我还是不会) 链接在这里 题面可以看链接: 先看题意 这么大的l,r,先来个离散化 很容易,我们可以想到一个结论 假设一个点被覆盖次数大于m 我们将覆盖这个点的区间升序排序: 则所选区间一定是排序后序列中的一个长度为m+1的连续子序列 证明很容易,取更远的点会使最大值更大从而使差值最大 我们可以从这个结论出发,再观察该题所求,符合尺取法的思路 我们考虑用尺取法求解 没了解尺取法的读者可以去自行了解一下 如何求解呢?…
[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\)了, 所…
[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…
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分靠肮脏的打表 单哈希快,双哈希稳 这里…