后缀自动机再复习 + [USACO17DEC] Standing Out from the Herd
here:https://oi-wiki.org/string/sam/
下面转自 KesdiaelKen的雷蒻论坛

来个广义后缀自动机模板题 [USACO17DEC]Standing Out from the Herd
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 100005;
int n, l[MAXN], m, s[MAXN];
long long ans[MAXN];
namespace SAM {
const int MAXP = 200005;
const int C = 26;
int tr[MAXP][C], link[MAXP] = { -1 }, len[MAXP], sz = 1, last;
int vis[MAXP];
inline void Insert(int c) {
int cur = sz++, p;
len[cur] = len[last] + 1;
for(p = last; ~p && !tr[p][c]; p = link[p]) tr[p][c] = cur;
if(!~p) link[cur] = 0;
else {
int q = tr[p][c];
if(len[q] == len[p] + 1) link[cur] = q;
else {
int clone = sz++;
len[clone] = len[p] + 1, link[clone] = link[q];
memcpy(tr[clone], tr[q], sizeof tr[q]);
for(; ~p && tr[p][c] == q; p = link[p]) tr[p][c] = clone;
link[q] = link[cur] = clone;
}
}
last = cur;
}
inline void Update(int x, int i) {
for(; ~x && vis[x] != i && ~vis[x]; x = link[x])
if(vis[x]) vis[x] = -1;
else vis[x] = i;
}
inline void Solve() {
m = 0;
for(int i = 1; i <= n; ++i)
for(int j = 0, r = 0; j < l[i]; ++j)
Update(r = tr[r][s[m++]], i);
for(int i = 1; i < sz; ++i)
if(~vis[i]) ans[vis[i]] += len[i] - len[link[i]];
for(int i = 1; i <= n; ++i)
printf("%lld\n", ans[i]);
}
}
using namespace SAM;
int main () {
scanf("%d", &n);
for(int i = 1; i <= n; ++i) {
char ch; last = 0;
while(!isalpha(ch=getchar()));
while(isalpha(ch))
++l[i], Insert(s[m++] = ch-'a'), ch = getchar();
}
Solve();
}
后缀自动机再复习 + [USACO17DEC] Standing Out from the Herd的更多相关文章
- P4081 [USACO17DEC]Standing Out from the Herd P
知识点: 广义 SAM 原题面 Luogu 「扯」 随便「口胡」一下居然「过」了. 比较考验「代码能力」,第一次感觉「大模拟」没有白写((( 还有这个「符号」实在是太「上头」了. 前置知识 在线构造广 ...
- [USACO17DEC]Standing Out from the Herd(广义后缀自动机)
题意 定义一个字符串的「独特值」为只属于该字符串的本质不同的非空子串的个数.如 "amy" 与 “tommy” 两个串,只属于 "amy" 的本质不同的子串为 ...
- Luogu4081 USACO17DEC Standing Out from the Herd(广义后缀自动机)
建出广义SAM,通过parent树对每个节点求出其是否仅被一个子串包含及被哪个包含. 写了无数个sam板子题一点意思都没啊 #include<bits/stdc++.h> using na ...
- 【LuoguP4081】[USACO17DEC]Standing Out from the Herd
题目链接 题意 给定多个字符串,每个串中仅在该串中出现的本质不同的子串个数. Sol 多串匹配想到用广义SAM. 之后从串的匹配角度不是很好做.发现一个本质不同的串最多只会贡献到一个串的答案里. 那么 ...
- P4081 [USACO17DEC]Standing Out from the Herd
思路 对所有串建立广义SAM,之后记录SZ,统计本质不同子串时只统计SZ=1的即可 代码 #include <cstdio> #include <algorithm> #inc ...
- [洛谷P4081][USACO17DEC]Standing Out from the Herd
题目大意:给你$n$个字符串,对每个字符串求出只在这个字符串中出现的字串的个数 题解:先建广义$SAM$,然后对每个点统计一下它的子树中是不是都是在同一个字符串中的,是的话,就把这个点标成这一个字符串 ...
- 【[USACO17DEC]Standing Out from the Herd】
题目 不会广义\(SAM\)啊 但信仰插入特殊字符就可以搞定一切了 我们先把所有的串搞在一起建出一个\(SAM\),记得在中间插入特殊字符 对于\(parent\)树上的一个节点,只有当其\(endp ...
- HDU 5442 后缀自动机+kmp
题目大意: 给定一个字符串,可理解成环,然后选定一位置,逆时针或顺时针走一遍,希望得到字典序最大,如果同样大,希望找到起始位置最小的,如果还相同,就默认顺时针 比赛一直因为处理最小位置出错,一结束就想 ...
- 【BZOJ3926】【ZJOI2015】诸神眷顾的幻想乡 广义后缀自动机
题目: 题目在这里 思路&做法: 参考的题解 既然只有\(20\)个叶子节点, 那么可以从每个叶子节点往上建一颗\(trie\)树, 然后合并成一棵大的\(trie\)树, 然后构建广义后缀自 ...
随机推荐
- TypeScript 类型推导及类型兼容性
类型推导就是在没有明确指出类型的地方,TypeScript编译器会自己去推测出当前变量的类型. 例如下面的例子: let a = 1; 我们并没有明确指明a的类型,所以编译器通过结果反向推断变量a的类 ...
- Asp.net core 学习笔记 ( ef core transaction scope & change level )
ef core 有 unit of work 的概念,当我们 save change 时会自动使用 transaction 确保更新的一致性. 隔离级别是默认的 read committed 不允许脏 ...
- jq使用ajax请求,返回状态 canceled错误
在使用jq,ajax请求时出现该错误 原因:button按钮类型为type=submit ,script中又自定用botton按钮点击提交ajax,造成冲突. 解决方法:button按钮类型改为 ty ...
- eclipse怎样修改同名包(package)的显示样式、格式
打开我们的项目,可以看到左侧的package看上去特别多,没有层级. 点击Package Explorer右上角的箭头图标. 可以看到“Flat(扁平)”,“Hierarchical(分层)”两个选项 ...
- Rider开发开发.NET Framework 4.5项目遇到的一些问题
使用rdier自带resharper功能,蛮爽的但是编译旧的项目时一直报错:Invalid option 'portable' for /debug; must be full or pdbonly' ...
- gitea configure
gitea configure app.ini APP_NAME = Gitea: Git with a cup of tea RUN_USER = LSGX RUN_MODE = prod [oau ...
- Java中常见时间类的使用
模拟场景针对于常用的操作API,比如流操作(字符流.字节流),时间操作等,仅仅了解概念性的定义终究是无法了解该类的用途和使用方式:这种情况在使用的时候便一脸茫然,脑海中映射不到对应的知识点.本篇博客将 ...
- js数组破坏性和非破坏性方法
数组原型方法:破坏性.会改变数组. shift().unshift().pop().push().splice();resver(),sort().在对数字排序的时候不能用原来的方法了,那样会导致值溢 ...
- form表单详解
form表单 form是一个复杂的系统标签,其内部又可包含很多的一些输入标签 例如input 输入文本标签 checkbox 多选标签等等 form表单有几个属性我们需要注意一下 1:action属 ...
- ARC模式下获取retainCount的方法
_objc_rootRetainCount(obj)可以获取obj的retainCount,不过不清楚是不是私有api,因此建议调试时使用.