Advertisement

洛谷P4051字符加密(基于后缀数组)

阅读量:

1、将字符串进行复制操作,使其形成两个副本,这一过程即可转化为后缀排序的相关问题。

复制代码
    #include <bits/stdc++.h>
    using namespace std;
    const int N = 1e6 + 10;
    
    char s[N];
    int n, m;	//n是后缀个数, m是桶的个数
    int x[N];	//桶数组
    int y[N];	//辅助数组
    int c[N];	//计数数组
    int sa[N];	//sa[k] 表示排名为k的数组后缀编号
    int rk[N];	//rk[k] 表示后缀字符串k 的排名
    int height[N];	// heght[k] = lcp(sa[i], sa[i - 1])
    
    void get_sa()
    {
    	int i, k;
    	// 按第一个字母排序
    	for(i = 1; i <= n; ++i)	// 按第一个字母编桶号, 并累计
    		c[(x[i] = s[i])]++;
    	for(i = 1; i <= m; ++i)	
    		c[i] += c[i - 1];
    	for(i = n; i; --i)		//后缀i的排序是i 所在桶号的剩

全部评论 (0)

还没有任何评论哟~