连NOI Day1T1都不会做...看了题解都写不出来还要抄Claris的代码.. 题目链接: (luogu)https://www.luogu.org/problemnew/show/P1117 (bzoj)https://www.lydsy.com/JudgeOnline/problem.php?id=4650 (uoj)http://uoj.ac/problem/219 题解: \(f[i]\)表示以\(i\)结束的\(AA\)型子串个数,\(g[i]\)表示以\(i\)开始的\(AA\)…
#219. [NOI2016]优秀的拆分 题意:求有多少AABB样子的子串,拆分不同的同一个子串算多个 一开始一直想直接求,并不方便 然后看了一眼Claris的题解的第一行就有思路了 如果分开,求\(f[i]\)以i结尾AA形式子串和\(g[i]\)以i开始AA形式子串 就可以套路了 使用常用技巧,枚举\(L=|A|\),AA子串一定覆盖了两个关键点,枚举更新就行了,对于区间加可以使用差分 其实这道题很好拿95分啊,\(O(n^2)\)用哈希判断就行了 #include <iostream>…
原文链接http://www.cnblogs.com/zhouzhendong/p/9025092.html 题目传送门 - UOJ#219 (推荐,题面清晰) 题目传送门 - BZOJ4650 题意 如果一个字符串可以被拆分为AABB的形式,其中AA和BB是任意非空字符串,则我们称该字符串的这种拆分是优秀的. 现在给出一个长度为n的字符串S,我们需要求出,在它所有子串的所有拆分方式中,优秀拆分的总个数.这里的子串是指字符串中连续的一段. 多组数据,数据组数$\leq 10,n\leq 3000…
题面:洛谷 题解: 因为对于原串的每个长度不一定等于len的拆分而言,如果合法,它将只会被对应的子串统计贡献. 所以子串这个限制相当于是没有的. 所以我们只需要对于每个位置i求出f[i]表示以i为开头的形如BB这样的串的个数,g[i]表示以i为结尾的形如AA这样的串的个数即可. 考虑分别处理这2个数组. 我们可以枚举AA(BB)这样的串中A(B)的长度l,然后把原串每l个字符放在一个块中,在考虑统计答案. 先考虑这样一个问题: 假如固定一个串的结尾,再枚举这个串A的长度,怎样可以判断是否合法?…
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\)的…
题目链接 \(Click\) \(Here\) 这题质量不错,就是暴力分有点足\(hhhhhhhh\),整整有\(95\)分. (搞得我写完暴力都不想写正解直接理解思路之后就直接水过去了\(QwQ\)) (啊好啦好啦水过去是我的锅啦,我自己出来挨打还不行嘛\(QAQ\)) 其实就是把\(AABB\)换成求\(AA\)然后组合在一块,最后的部分需要推一个奇妙的性质,这里我也不好叙述,详情请见这个大佬的博客.至于求\(AA\)的方法可以考虑使用后缀数组+\(RMQ\)实现\(O(1)\)匹配. (别…
我们只需要统计在某一个点开始的形如$AA$字符串个数,和结束的个数相乘求和. 首先枚举循环节的长度L.即$\mid (A) \mid=L$ 然后肯定会经过s[i]和[i+L]至少两个点. 然后我们可以枚举,然后求出循环节循环的次数.起点.终点,然后发现答案更新是一段$+1$的操作, 然后就可以用差分的思想更新即可. #include <map> #include <cmath> #include <queue> #include <cstdio> #incl…
4453: cys就是要拿英魂! Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 90  Solved: 46[Submit][Status][Discuss] Description pps又开始dota视频直播了!一群每天被pps虐的蒟蒻决定学习pps的操作技术,他们把pps在这局放的技能记录了下 来,每个技能用一个字符表示.经过研究,蒟蒻们发现字典序更大的连招威力更大.于是所有蒟蒻都想学习pps最 强的连招.但是他们太弱了,不能学会整个视频里的…
把三个串加上ASCII大于z的分隔符连起来,然后求SA 显然每个相同子串都是一个后缀的前缀,所以枚举s1的每个后缀的最长和s2相同的前缀串(直接在排序后的数组里挨个找,最近的两个分别属于s1和s2的后缀的height一定是最长符合要求的前缀),然后判断一下这个子串里最早出现的和s3相同的子串的位置,这里先预处理出每个等于s3的子串的位置然后二分找(没有就直接和height取max),然后答案就是从这个后缀开头到和s3相同子串结尾的前一个位置的长度 #include<iostream> #inc…
[LOJ 2083][UOJ 219][BZOJ 4650][NOI 2016]优秀的拆分 题意 给定一个字符串 \(S\), 求有多少种将 \(S\) 的子串拆分为形如 AABB 的拆分方案 \(|S|\le 30000\) (\(95\%\) 数据 \(|S|\le 2000\)) 题解 考场上遇见这题直接打95分暴力哈希跑路就完事了吧 \(O(n^2)\) 暴力就直接枚举所有子串看它是不是 AA 型的, 在左右端点处分别标记一下, 然后枚举断点把两边的方案数乘起来就完事了. 考虑优化这个暴…