spoj694】的更多相关文章

SPOJ694 DISUBSTR 题目描述: Given a string, we need to find the total number of its distinct substrings. 输入格式: T- number of test cases. T<=20; Each test case consists of one string, whose length is <= 1000 输出格式: For each test case output one number sayin…
题意:求一个字符串的不相同的子串个数 n<=1000 思路:这是一道论文题 ..]of longint; n,i,m,ans,v,cas:longint; ch:ansistring; procedure swap(var x,y:longint); var t:longint; begin t:=x; x:=y; y:=t; end; function cmp(a,b,l:longint):boolean; begin exit((y[a]=y[b])and(y[a+l]=y[b+l]));…
DISUBSTR - Distinct Substrings   Given a string, we need to find the total number of its distinct substrings. Input T- number of test cases. T<=20;Each test case consists of one string, whose length is <= 1000 Output For each test case output one nu…
题意:求不相同的子串个数 题解: 考虑一下后缀数组 yy一下就能发现答案就是n*(n+1)/2-sigma(i=1;i<=n;i++)height[i] 代码:…
Given a string, we need to find the total number of its distinct substrings. Input \(T-\) number of test cases. \(T<=20\); Each test case consists of one string, whose length is \(<=1000\) Output For each test case output one number saying the numbe…
Given a string, we need to find the total number of its distinct substrings. Input T- number of test cases. T<=20;Each test case consists of one string, whose length is <= 1000 Output For each test case output one number saying the number of distinc…
https://vjudge.net/problem/SPOJ-DISUBSTR https://www.luogu.org/problemnew/show/SP694 http://www.spoj.com/problems/DISUBSTR/en/ 给定一个字符串,求不相同的子串的个数. 参考罗穗骞论文. 显然一个子串可以定义为一个后缀的前缀. 我们还可以求出来相邻排名的后缀之间的最长公共前缀的长度. 答案就是所有子串数量-所有height. (其实大胆猜想,不用证明即可(滑稽)) 说下原理…
求不相同子串个数    该问题等价于求所有后缀间不相同前缀的个数..也就是对于每个后缀suffix(sa[i]),将贡献出n-sa[i]+1个,但同时,要减去那些重复的,即为height[i],故答案为n-sa[i]+1-height[i]的累计. ; var x,y,rank,sa,h,c:..maxn] of longint; s:ansistring; t,q,n:longint; function max(x,y:longint):longint; begin if x>y then e…
题意:求字符串中不同子串的个数. 解题关键:每个子串一定是某个后缀的前缀,那么原问题等价于求所有后缀之间的不相同的前缀的个数. 1.总数减去height数组的和即可. 注意这里height中为什么不需要进行组合计数,因为,每一个height的左端点已经确定,所以只需变动右端点,总共$height[i]$种情况. 2.如果所有的后缀按照 suffix(sa[1]), suffix(sa[2]),suffix(sa[3]), …… ,suffix(sa[n])的顺序计算,不难发现,对于每一次新加进来…
New Distinct Substrings 题目大意 给定一个字符串,求本质不同的子串个数 题解 SA常见思想:每一个子串都是某个后缀的前缀 考虑每一个后缀的贡献,首先他拥有n - sa[i]个(我是用的模板中,sa[i]的大小是0....n-1)前缀,这些前缀有height[i]个跟sa[i-1]相同,要减去.剩下的部分不可能与sa[i-1]之前的想通了,不然sa[i]会排在sa[i-1]前面 还要注意本题的字符集是小写字母(鬼知道样例是什么东西) #include <cstdio> #…
后缀三姐妹 P.S.后缀大家族关系:后缀自动机fail指针=后缀树,后缀树前序遍历=后缀数组 一.后缀数组:orz罗穗骞集训队论文 给每个后缀按字典序排序 rank[]表示从i开始的后缀排名多少 sa[]表示排名为i的后缀是从哪儿开始的 倍增 & dc3(反正dc3我是不会QAQ) 每次倍增后将二元组桶排(我自己yy了一个vector的可能比较慢QAQ) h数组按照原串顺序求,利用求上一位h后留下的信息 应用:RMQ,多串拼接,分组,穷举+判断...... //by xxb #include<…
题意:求母串中有多少不同的包含x字符的子串 分析:(首先奉上FZU官方题解) 上面那个题就是SPOJ694 ,其实这两个题一样,原理每次从小到大扫后缀sa数组,加上新的当前后缀的若干前缀,再减去重复的 吐槽:因为打多校的时候忘记了后缀数组(其实是就算记着也不会做这题),所以傻逼了,所以眼看无数人1y这题,让我一度产生了暴力的想法 还是太弱,太傻逼 #include <iostream> #include <cmath> #include <cstdio> #includ…
spoj705:http://www.spoj.com/problems/SUBST1/ 题意:和spoj694一样,只是数据范围变大了. 题解:同spoj694. #include<iostream> #include<cstdio> #include<cstring> using namespace std; ; char str[maxn]; int wa[maxn],wb[maxn],wv[maxn],wn[maxn],a[maxn],sa[maxn]; int…
spoj694:http://www.spoj.com/problems/DISUBSTR/ 题意:给以一个串,求这个串的所有不同子串的个数. 题解:第一次接触后缀数组,这里可以转化成,求所有子串后缀的前缀的个数,然后减去重复计算的.这里怎么减去重复的呢,就是我们还有height[]数组,height[i]表示sa[i]与sa[i-1]最长公共前缀,只要统计的时候,把前缀减去就好. #include<iostream> #include<cstdio> #include<cs…
http://poj.org/problem?id=3415 给定两个字符串A 和B,求长度不小于k 的公共子串的个数(可以相同). 论文题,和上道题(POJ2774)类似,首先想到现将AB串合并,然后子串可以表示成字符串后缀的前缀,于是我们比较任意两个A后缀和B后缀,用height求出他们的公共子串长度就很好做了. (不懂为什么好做的可以看SPOJ694) 那么最坏的想法就是每遇到B后缀就和前面遇到的A后缀比较,这样显然TLE,也没用到height数组的优越性. 但是我们A后缀可以用单调栈维护…
写一发后缀数组套路题,看起来简单,写起来要人命哦~~~ 总共13题. 分两天debug吧,有点累了~~~ suffix(后缀数组的应用) sa[i] :排名第 i 的后缀在哪(i 从 1 开始) rank[i]:后缀 i 排第几 (i 从 0 开始) height[i]:排名为 i 和 i-1 的两个后缀的最长公共前缀(LCP)长度 (i 从 2 开始) 模板:加上RMQ操作 #include <stdio.h> #include <string.h> #include <m…
用了近两周的时间,终于把罗神那篇后缀数组应用看完了,题目也写了一遍,T了无数次...详见前几篇博文... 后缀数组很重要的是那个height数组,可以用来做各种奇奇怪怪的东西...常用方法去是去二分,比较少见的是单调栈维护...明天把切的12道题题型整理归纳后再补在后面吧,有点晚了...明天复习AC自动机去! 预备:最长公共前缀 对于suffix(i)和suffix(j) 假设rank[i]<rank[j] 那么lcp(i,j)=min{height[k]| rank[i]+1<=k<=…
以下题目均来自罗穗骞的论文... No.1最长公共前缀 最长公共前缀: 题目: 给定一个字符串,询问某两个后缀的最长公共前缀. 分析: 某两个后缀的最长公共前缀就是区间height最小值,转化为RMQ问题,nlgn预处理,O(1)询问... No.2单个字符串的相关问题 1.重复子串 可重叠最长重复子串: 题目: 给定一个字符串,求最长重复子串,这两个子串可以重叠. 分析: 就是height数组的最大值... 不可重叠最长重复子串(POJ1743) 题目: 给定一个字符串,求最长重复子串,这两个…
目录 Suffix Array Summay 单个字符串问题 两个字符串问题 多个字符串问题 AC-Automaton Summary 求长度为n(2e9)不包含给定字符串的合法串个数 包含至少一个词根长度不超过n(2e9)的字符串个数 Suffix Automaton Summary SAM 的定义 SAM的性质 子串的性质 结束位置 endpos Palindromic Tree(回文自动机) Summary Kmp & ExKmp Summary Manacher Summary Hash…