后缀数组
酷酷的Herio
这个作者很懒,什么都没留下…
展开
-
后缀数组SA的复习
后缀数组SASASA的复习。好久没做SASASA的题,都快忘光了,下面会做一些SASASA的题目。SASASA是用于解决字符串的问题的比较高效的一个算法。具体应用待补充。第一个题:裸题,给定一个字符串,求sa[]sa[]sa[]数组。应用:给定字符串,求出排名为第iii名的后缀下标位置。传送门下面代码里有我重新写的详细注释。#include<bits/stdc++.h>using namespace std;typedef long long ll;const int N=原创 2020-09-16 11:33:11 · 376 阅读 · 0 评论 -
HDU.6761.Minimum Index(Lyndon分解)
HDU.6761.Minimum Index(Lyndon分解)思路:LyndonLyndonLyndon分解。分三种情况。令d[i]d[i]d[i]表示前缀iii的最小后缀位置当s[j]==s[k]s[j]==s[k]s[j]==s[k]时,说明因为s[j…k]s[j\dots k]s[j…k]含有循环节(k−j)(k-j)(k−j)。所以d[k]=d[j]+(k−j)d[k]=d[j]+(k-j)d[k]=d[j]+(k−j)。当s[j]<s[k]s[j]<s[k]s[j]<原创 2020-07-24 16:17:15 · 492 阅读 · 0 评论 -
P6114 【模板】Lyndon 分解
P6114 【模板】Lyndon 分解冷门的板子题,居然在hduhduhdu多校出了。搞一波,这里不讲解原理,只讲实现。将字符串分为三个部分:s1s2s3s_1s_2s_3s1s2s3。s1:s_1:s1:已经进行处理好的LyndonLyndonLyndon串。s2:s_2:s2:正在处理的LyndonLyndonLyndon近似串。s3:s_3:s3:未处理的串。1.预备工作,三个指针i,j,ki,j,ki,j,k。i:i:i:指向s2s_2s2的首字符。j:j:j:指向原创 2020-07-24 14:16:52 · 386 阅读 · 0 评论 -
P3809 【模板】后缀排序
P3809 【模板】后缀排序传送门学习博客1学习博客2第一次写,第一次写,第一次写重要的事情说三遍,记录一下,注释代码便于复习。#include<cstdio>#include<iostream>#include<algorithm>#include<cstring>using namespace std;const int N=1e6+5;char s[N];int n,sz,sa[N],rk[N],tp[N],b[N];//s[原创 2020-06-26 17:35:08 · 322 阅读 · 0 评论 -
Birthday Gift(排序&后缀数组)
Birthday Gift(排序&后缀数组)传送门思路:排序+后缀数组的好题。要求 min(xa+yb,xb+ya)min(x_a+y_b,x_b+y_a)min(xa+yb,xb+ya).根据x,yx,yx,y的对称性,不妨令最小值为xa+ybx_a+y_bxa+yb。所以xa+yb≤xb+ya→xa−xb≤ya−yb。x_a+y_b\leq x_b+y_a\rightarrow x_a-x_b\leq y_a-y_b。xa+yb≤xb+ya→xa−xb≤ya−yb原创 2020-06-04 15:23:10 · 843 阅读 · 0 评论