随笔分类 - suffix array
摘要:后缀数组的简单题吧。 1 #include 2 #include 3 #include 4 using namespace std; 5 const int maxn=100000+10; 6 char s[maxn]; 7 int sa[maxn],t[maxn],t2[maxn],c[maxn]; 8 int rank[maxn],height[maxn]; 9 int d[maxn][50];10 void build_sa(int n,int m)11 {12 int i,*x=t,*y=t2;13 for(i=0;i=0;i--) sa[--c[x[i]]]=i;17...
阅读全文
摘要:不能循环输入。。。 1 #include 2 #include 3 #include 4 using namespace std; 5 const int maxn=200000+10; 6 char s[maxn]; 7 int sa[maxn],t[maxn],t2[maxn],c[maxn]; 8 int rank[maxn],height[maxn]; 9 void build_sa(int n,int m)10 {11 int i,*x=t,*y=t2;12 for(i=0;i=0;i--) sa[--c[x[i]]]=i;16 17 for(int k=1;...
阅读全文
摘要:求最长回文字串。 1 #include 2 #include 3 #include 4 using namespace std; 5 const int maxn=2000+10; 6 char s[maxn]; 7 int sa[maxn],t[maxn],t2[maxn],c[maxn]; 8 int rank[maxn],height[maxn]; 9 void build_sa(int n,int m)10 {11 int i,*x=t,*y=t2;12 for(i=0;i=0;i--) sa[--c[x[i]]]=i;16 17 for(int k=1;k=k...
阅读全文
摘要:n-sa[k]+1-height[k] 累加 1 #include 2 #include 3 #include 4 using namespace std; 5 const int maxn=1000+10; 6 char s[maxn]; 7 int sa[maxn],t[maxn],t2[maxn],c[maxn]; 8 int rank[maxn],height[maxn]; 9 void build_sa(int n,int m)10 {11 int i,*x=t,*y=t2;12 13 for(i=0;i=0;i--) sa[--c[x[i]]]=i;17 f...
阅读全文
摘要:二分答案,利用height数组进行判定。 1 #include 2 #include 3 #include 4 using namespace std; 5 const int maxn=20000+10; 6 const int maxvalue=1000000+10; 7 int s[maxn]; 8 int sa[maxn],t[maxn],t2[maxn],c[maxvalue],n; 9 int rank[maxn],height[maxn];10 void build_sa(int m)11 {12 int i,*x=t,*y=t2;13 for(i=0;i=0;i...
阅读全文
摘要:第一道后缀数组。 1 #include 2 #include 3 #include 4 using namespace std; 5 const int maxvn=20000+10; 6 int s[maxvn]; 7 int sa[maxvn],t[maxvn],t2[maxvn],c[maxvn]; 8 int rank[maxvn],height[maxvn]; 9 void build(int n,int m)10 {11 int i,*x=t,*y=t2;12 13 for(i=0;i=0;i--) sa[--c[x[i]]]=i;18 for(int k...
阅读全文
浙公网安备 33010602011771号