spoj705】的更多相关文章

题目:http://cojs.tk/cogs/problem/problem.php?pid=1709 1709. [SPOJ705]不同的子串 ★★   输入文件:subst1.in   输出文件:subst1.out   简单对比时间限制:1 s   内存限制:256 MB [题目描述] 给定一个字符串,计算其不同的子串个数. [输入格式] 一行一个仅包含大写字母的字符串,长度<=50000 [输出格式] 一行一个正整数,即不同的子串个数. [样例输入] ABABA [样例输出] 9 [来源…
[题目描述] 给定一个字符串,计算其不同的子串个数. [输入格式] 一行一个仅包含大写字母的字符串,长度<=50000 [输出格式] 一行一个正整数,即不同的子串个数. [样例输入] ABABA [样例输出] 9 [思路] 一看就知道是后缀数组题啦-但是我不会写QAQ..只好现学现用啦- 在字符串最后补上一个'$',不因为别的只因为它比‘A’还要小..不然你补ascII码是0的也可以.. 申请rank数组和sa数组,rank[i]=j代表后缀i排第j位,sa[i]=j代表排名第i的是后缀j.也就…
http://www.spoj.com/problems/SUBST1/en/  题目链接 SUBST1 - New Distinct Substrings no tags  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 le…
题目描述] 给定一个字符串,计算其不同的子串个数. [输入格式] 一行一个仅包含大写字母的字符串,长度<=50000 [输出格式] 一行一个正整数,即不同的子串个数. [样例输入] ABABA [样例输出] 9 题解: 显然后缀可以是一个子串,然后后缀中可能包含多个子串. 我们考虑不重复统计,容易发现 一个后缀的贡献为L-high[i]+1 因为high[i]之前的显然可以在后面的串中被统计到,所以可以避免重复 #include <algorithm> #include <iost…
题解: 后缀数组求出height 然后ans=所有串-所有height 代码: #include<bits/stdc++.h> using namespace std; ; int t,ans,n,m,wa[N],wb[N],wsf[N],wv[N],sa[N],rank[N],height[N],s[N],a[N]; char str[N],str1[N],str2[N]; int cmp(int *r,int a,int b,int k) { return r[a]==r[b]&&…
DISUBSTR - Distinct Substrings 链接 题意: 询问有多少不同的子串. 思路: 后缀数组或者SAM. 首先求出后缀数组,然后从对于一个后缀,它有n-sa[i]-1个前缀,其中有height[rnk[i]]个被rnk[i]-1的后缀算了.所以再减去height[rnk[i]]即可. 代码: 换了板子. #include<cstdio> #include<algorithm> #include<cstring> #include<iostr…
给一个字符串求有多少个不相同子串. 每一个子串一定都是某一个后缀的前缀.由此可以推断出总共有(1+n)*n/2个子串,那么下面的任务就是找这些子串中重复的子串. 在后缀数组中后缀都是排完序的,从sa[1]到sa[n],这么思考以某个串为前缀的子串有几个,那么容易想到重复子串的个数其实就是∑height[i]. 所以结果就是(1+n)*n/2-∑height[i]. #include<cstdio> #include<cstring> #include<algorithm>…
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…
题意:求字符串中不同子串的个数. 解题关键:每个子串一定是某个后缀的前缀,那么原问题等价于求所有后缀之间的不相同的前缀的个数. 1.总数减去height数组的和即可. 注意这里height中为什么不需要进行组合计数,因为,每一个height的左端点已经确定,所以只需变动右端点,总共$height[i]$种情况. 2.如果所有的后缀按照 suffix(sa[1]), suffix(sa[2]),suffix(sa[3]), …… ,suffix(sa[n])的顺序计算,不难发现,对于每一次新加进来…
后缀三姐妹 P.S.后缀大家族关系:后缀自动机fail指针=后缀树,后缀树前序遍历=后缀数组 一.后缀数组:orz罗穗骞集训队论文 给每个后缀按字典序排序 rank[]表示从i开始的后缀排名多少 sa[]表示排名为i的后缀是从哪儿开始的 倍增 & dc3(反正dc3我是不会QAQ) 每次倍增后将二元组桶排(我自己yy了一个vector的可能比较慢QAQ) h数组按照原串顺序求,利用求上一位h后留下的信息 应用:RMQ,多串拼接,分组,穷举+判断...... //by xxb #include<…