又开始划了
我要专心的学文化课去!!!退役就要有点退役的样子!!!2024之前我再也不回来了!!!我现在的行为就是在毁掉自己的青春!!!……
我反悔!
当我无意(其实是有意的)发现SAM这个东西居然时间和空间都是线性的时候,我就知道完了,我又跳坑了……
所以我仔细的研究了一下相关引理和parent树,发现没有看懂建树为什么可以取代endpos来和len一起描述子串。“找到这个点子树中的所有叶子”听上去还有点玄学……
吐槽OIwiki上的“艺术字格式”挂掉了导致我理解endpos是啥都看了半天……最后他在洛谷上的版就没事。
鹤了一遍板子完全不知道是啥很有可能抄错了千万别用,就存个档而已。
今天省选联测5又搬了
多校noi前集训模拟第十六场(距国赛仅有16天)
这场考试,3个T都一模一样。
code
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 1e4 + 3;
struct SAM
{
int cnt = 1, las = 1;
void add(int c)
{
int fa = las, now = las = ++cnt;
d[now].len = d[fa].len + 1;
f[now] = 1;
for(; fa&&!d[fa].ch[c]; fa=d[fa].fa) d[fa].ch[c] = now;
if(!fa) d[now].fa = 1;
else
{
int j = d[fa].ch[c];
if(d[j].len == d[fa].len + 1) d[now].fa = j;
else
{
int clone = ++cnt;
d[clone] = d[j];
d[clone].len = d[fa].len + 1;
d[j].fa = d[now].fa = clone;
for(; fa&&d[fa].ch[c]==j; fa=d[fa].fa) d[fa].ch[c] = clone;
}
}
}
}sam;
int main()
{
scanf("%s", s+1);
int n = strlen(s+1);
for(int i=1; i<=n; i++)
{
sam.add(s[i]-'a'+1);
}
return 0;
}

时光花火,水月星辰

浙公网安备 33010602011771号