题解 [51nod1753] 相似子串】的更多相关文章

题解 [51nod1753] 相似子串 题面 解析 先考虑相等的时候怎么办, 我们考虑求出每个字母的贡献,这样字母相等的问题就可以用并查集来解决. 具体来说,我们先对于每个字母,把S中等于它的标为1,其它的标为0, 那么S对于每个字母都有一个01串的形式, 再考虑对每个01串hash, 在统计答案的时候就枚举字母将它的hash值加到它并查集的贡献里去. 再考虑有一个不相等的情况, 这时设一个字符为a1,另一个为a2, 那么只有这两个字母的贡献不一样, 而这两个字母的贡献的值肯定是hash用的p进…
题意:两个字符串相似定义为: 1.两个字符串长度相等 2.两个字符串对应位置上至多有一个位置所对应的字符不相同 给定一个字符串\(s\),\(T\)次询问两个子串在给定的规则下是否相似.给定的规则指每次给出一些等价关系,如'a'='b','b'='c'(具有传递性) \(|s|,T \leq 3 \times 10^5\) 题目中的每次询问相当于把一些字符合并成了一些联通块,每个联通块内的字符视为相同.这用并查集合并. 首先考虑询问相等而非相似怎么做.直接的子串对比我们可以直接比较哈希值,但这里…
题意:给你一个01字符串,将长度为a到b之间(包含a.b)的子串按照出现次数排序.注意输入输出格式 题解:01子串对应一个二进制,为了区别11和011这样的不同子串,我们把长度也记录下来,官方题解是在子串前加上1来区别.然后按次数排序.为了方便,我将字符串代表的二进制转化为int整数,输出时再转化为字符串. http://train.usaco.org/usacoprob2?a=F1brtx4Sr2b&S=contact /* TASK:contact LANG:C++ */ #include&l…
Problems     # Name     A Summer Camp standard input/output 1 s, 256 MB    x3197 B Different is Good standard input/output 2 s, 256 MB    x2870 C Recycling Bottles standard input/output 2 s, 256 MB    x664 D Robin Hood standard input/output 1 s, 256…
题意: 给定一个字符串 求重复次数最多的连续重复子串 并输出字典序最小方案 题解: 枚举子串长度L 显然如果重复次数>1 那么答案串肯定包含s[1],s[1+L],s[1+L*2],...中的两个 枚举被答案包含位置 1+L*i 将1+L*i和1+L*(i+1) 向前.向后匹配 记匹配距离和为k 则重复次数为k/L 这样我们就能知道最多重复次数ans是多少 但是这题还要求字典序最小方案 求方案需要再进行一次枚举 方法同上 当重复次数和答案相等时 更新方案 但是我们知道 包含1+L*i 重复次数为…
Given an integer array, find a subarray where the sum of numbers is zero. Your code should return the index of the first number and the index of the last number. Example Given [-, , , -, ], , ] or [, ]. Note There is at least one subarray that it's s…
[BZOJ3544][ONTAK2010]Creative Accounting Description 给定一个长度为N的数组a和M,求一个区间[l,r],使得(\sum_{i=l}^{r}{a_i}) mod M的值最大,求出这个值,注意这里的mod是数学上的mod Input 第一行两个整数N,M.第二行N个整数a_i. Output 输出一行,表示答案. Sample Input 5 13 10 9 5 -5 7 Sample Output 11 HINT [数据范围]N<=200000…
题面 题意:给你一个字符串,问你满足s[i]=s[2n-i]=s[2n+i-2]的子串(这子串长度为3n-2)有多少个,原字符串长度<=5e5 题解:对于这种子串,其实要满足2个回文,跑过一次Manacher后,len[i]表示以i向两边扩展最远的回文串长度, 那么对于答案,实际就是统计满足下列条件(i,j)的对数 i  <= j j - i <= len[i] j - i <= len[j] 移项就是 i >= j -  len[j] j <= i + len[i]…
Vijos1425子串清除 题解   描述: 我们定义字符串A是字符串B的子串当且仅当我们能在B串中找到A串.现在给你一个字符串A,和另外一个字符串B,要你每次从B串中从左至右找第一个A串,并从B串中删除它,直到A串不为B串的子串,问你需要进行几次删除操作.   输入格式: 输入文件共2行,第一行一个字符串A(长度小于256),第二行一个字符串B. 30%的数据是随机生成的: 50%的数据满足输入文件大小小于300KB: 100%的数据满足输入文件小于500KB,字符串A.B中只会出现英文字母.…
目录 描述 解法一:暴力枚举法(Time Limit Exceeded) 思路 Java 实现 Python 实现 复杂度分析 解法二:滑动窗口(双指针) 思路 Java 实现 Python 实现 复杂度分析 解法三:滑动窗口(优化版) 思路 Java 实现 Python 实现 复杂度分析 解法四:滑动窗口(已知字符集) 思路 Java 实现 Python 实现 复杂度分析 更多 LeetCode 题解笔记可以访问我的 github. 描述 给定一个字符串,请你找出其中不含有重复字符的 最长子串…