UOJ 35 后缀数组】的更多相关文章

后缀数组裸题,求排名第1~n的后缀,想相邻后缀的最长公共前缀. 集训队模板就是硬lO(∩_∩)O哈哈~ #include <cstdio> #include <cmath> #include <cstring> #include <algorithm> using namespace std; +; int wa[maxn],wb[maxn],wv[maxn],ws[maxn]; int sa[maxn]; int r[maxn]; int cmp(int…
#35. 后缀排序 统计 描述 提交 自定义测试 这是一道模板题. 读入一个长度为 nn 的由小写英文字母组成的字符串,请把这个字符串的所有非空后缀按字典序从小到大排序,然后按顺序输出后缀的第一个字符在原串中的位置.位置编号为 11 到 nn. 除此之外为了进一步证明你确实有给后缀排序的超能力,请另外输出 n−1n−1 个整数分别表示排序后相邻后缀的最长公共前缀的长度. 输入格式 一行一个长度为 nn 的仅包含小写英文字母的字符串. 输出格式 第一行 n 个整数,第 i个整数表示排名为 i 的后…
35. 后缀排序 统计 描述 提交 自定义测试 这是一道模板题. 读入一个长度为 nn 的由小写英文字母组成的字符串,请把这个字符串的所有非空后缀按字典序从小到大排序,然后按顺序输出后缀的第一个字符在原串中的位置.位置编号为 11 到 nn. 除此之外为了进一步证明你确实有给后缀排序的超能力,请另外输出 n−1n−1 个整数分别表示排序后相邻后缀的最长公共前缀的长度. 输入格式 一行一个长度为 nn 的仅包含小写英文字母的字符串. 输出格式 第一行 nn 个整数,第 ii 个整数表示排名为 ii…
模板 #include<cstdio> #include<algorithm> #include<cstring> using namespace std; #define N 100001 int sa[N],t[N],t2[N],tong[N],n; char s[N]; inline bool cmp(int *y,int i,int k) { return (y[sa[i-1]]==y[sa[i]])&&((sa[i-1]+k>=n?-1:…
题面 http://uoj.ac/problem/35 题解 后缀数组当然可以 这里用哈希做 首先排序的问题在哪里 在于比较两个后缀的复杂度是O(length)的 但是我们可以通过找LCP来优化比较 我们二分两个串的LCP的长度 然后通过hash值判断是否相同 这样我们可以在$O(\log l)$的时间内算出两个串的LCP长度 所以排序的复杂度变成$O(n \log ^2 n )$ 然后求出连续两个后缀的LCP还是用二分的方法做 复杂度$O(n \log n)$ 总的复杂度$O(n \log ^…
1.题目大意:后缀数组模板题 2.分析:汝佳的书上的代码的有bug,还有那个n是字符串长度+1,''也要加入排序的 存个模板QAQ #include <cstdio> #include <cstdlib> #include <cstring> #include <algorithm> using namespace std; char s[101000]; int sa[101000], t[101000], t2[101000], c[101000]; i…
http://uoj.ac/problem/35 模板题,重新理了一遍关系.看注释吧.充分理解了倍增的意义,翻倍之后对上一次排序的利用是通过一种类似于队列的方式完成的. #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> using namespace std; ; ; int sa[maxn+pl]={};//排名第i…
#include<bits/stdc++.h> #define N 100005 using namespace std; char s[N]; int a[N],c[N],t1[N],t2[N],sa[N],rk[N],ht[N]; int m,n,p; void calcsa(int n,int m){ ,p=; ;i<=m;i++)c[i]=; ;i<=n;i++)c[x[i]=a[i]]++; ;i<=m;i++)c[i]+=c[i-]; ;i--)sa[c[x[i]…
这是一道模板题. 读入一个长度为 n 的由小写英文字母组成的字符串,请把这个字符串的所有非空后缀按字典序从小到大排序,然后按顺序输出后缀的第一个字符在原串中的位置.位置编号为 1 到 n. 除此之外为了进一步证明你确实有给后缀排序的超能力,请另外输出 n−1 个整数分别表示排序后相邻后缀的最长公共前缀的长度. 输入格式 一行一个长度为 n 的仅包含小写英文字母的字符串. 输出格式 第一行 n 个整数,第 i 个整数表示排名为 i 的后缀的第一个字符在原串中的位置. 第二行 n−1 个整数,第 i…
http://uoj.ac/problem/35 以前做后缀数组的题直接粘模板...现在重新写一下模板 注意用来基数排序的数组一定要开到N. #include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int N = 100003; int t1[N], t2[N], c[N]; void st(int *x, int *y, int *sa, int n, int…