题面

题解

一个串的出现次数等于$endpos$的大小,也是$parent$树上节点的$size$大小,

构建出后缀自动机,按拓补序,模拟即可。

代码

#include<cstdio>
#include<cstring>
#include<cctype>
#include<algorithm>
#define RG register
#define file(x) freopen(#x".in", "r", stdin);freopen(#x".out", "w", stdout);
#define clear(x, y) memset(x, y, sizeof(x)) inline int read()
{
int data = 0, w = 1; char ch = getchar();
while(ch != '-' && (!isdigit(ch))) ch = getchar();
if(ch == '-') w = -1, ch = getchar();
while(isdigit(ch)) data = data * 10 + (ch ^ 48), ch = getchar();
return data * w;
} const int maxn(1e6 + 10), maxm(maxn << 1);
int last = 1, cnt = 1;
char s[maxn]; long long ans;
int size[maxm], c[maxm], a[maxm];
struct node { int son[26], fa, len; } t[maxm]; void extend(int c)
{
node *p = t + last, *newp = &t[++cnt]; last = cnt;
newp -> len = p -> len + 1;
while(p - t && !p -> son[c]) p -> son[c] = newp - t, p = &t[p -> fa];
if(!(p - t)) newp -> fa = 1;
else
{
node *q = &t[p -> son[c]];
if(p -> len + 1 == q -> len) newp -> fa = q - t;
else
{
node *newq = &t[++cnt]; *newq = *q;
newq -> len = p -> len + 1;
q -> fa = newp -> fa = newq - t;
while(p - t && p -> son[c] == q - t)
p -> son[c] = newq - t, p = &t[p -> fa];
}
}
size[newp - t] = 1;
} int main()
{
#ifndef ONLINE_JUDGE
file(cpp);
#endif
scanf("%s", s + 1);
for(RG int i = 1, l = strlen(s + 1); i <= l; i++) extend(s[i] - 97);
for(node *i = t + 1; i != t + cnt + 1; i++) ++c[i -> len];
for(RG int i = 1; i <= cnt; i++) c[i] += c[i - 1];
for(node *i = t + 1; i != t + cnt + 1; i++) a[c[i -> len]--] = i - t;
for(RG int i = cnt; i; i--)
{
node *now = t + a[i];
size[now -> fa] += size[a[i]];
if(size[a[i]] > 1) ans = std::max(ans, 1ll * size[a[i]] * now -> len);
}
printf("%lld\n", ans);
return 0;
}

Luogu3804 【模板】后缀自动机的更多相关文章

  1. [模板] 后缀自动机&&后缀树

    后缀自动机 后缀自动机是一种确定性有限状态自动机, 它可以接收字符串\(s\)的所有后缀. 构造, 性质 翻译自毛子俄罗斯神仙的博客, 讲的很好 后缀自动机详解 - DZYO的博客 - CSDN博客 ...

  2. Luogu3804:[模板]后缀自动机

    题面 luogu Sol \(sam\)然后树形\(DP\) 当时还不会拓扑排序的我 # include <bits/stdc++.h> # define IL inline # defi ...

  3. 洛谷 P3804 [模板] 后缀自动机

    题目:https://www.luogu.org/problemnew/show/P3804 模仿了一篇题解,感觉很好写啊. 代码如下: #include<cstdio> #include ...

  4. 【Luogu3804】【模板】后缀自动机(后缀自动机)

    [Luogu3804][模板]后缀自动机(后缀自动机) 题面 洛谷 题解 一个串的出现次数等于\(right/endpos\)集合的大小 而这个集合的大小等于所有\(parent\)树上儿子的大小 这 ...

  5. 字符串数据结构模板/题单(后缀数组,后缀自动机,LCP,后缀平衡树,回文自动机)

    模板 后缀数组 #include<bits/stdc++.h> #define R register int using namespace std; const int N=1e6+9; ...

  6. P3804 【模板】后缀自动机

    P3804 [模板]后缀自动机 后缀自动机模板 详情可见luogu题解板块 #include<iostream> #include<cstdio> #include<cs ...

  7. 2018.07.17 后缀自动机模板(SAM)

    洛谷传送门 这是一道后缀自动机的模板题,这道题让我切身体会到了后缀自动机的方便与好写. 代码如下: #include<bits/stdc++.h> #define N 2000005 #d ...

  8. 牛客网 桂林电子科技大学第三届ACM程序设计竞赛 A.串串-后缀自动机模板题

    链接:https://ac.nowcoder.com/acm/contest/558/A来源:牛客网 A.串串 小猫在研究字符串. 小猫在研究字串. 给定一个长度为N的字符串S,问所有它的子串Sl…r ...

  9. SPOJ 8222. Substrings(后缀自动机模板)

    后缀自动机+dp. 后缀自动机主要是在functioner大牛那里学习的:http://blog.sina.com.cn/s/blog_70811e1a01014dkz.html 这道题是在No_st ...

随机推荐

  1. php模式设计

    1,策略模式 2,个体模式 3,工厂模式 4,观察者模式 <?php class ExchangeRate { static private $instance = NULL; private ...

  2. NSLayout​Constraint

    NSLayout​Constraint:定义了UI属性有参照关系的两个UI元素,一个元素的frame变化时,另一个元素变化的规则:依赖依附于最近的共同父视图,包含参照元素本身. 首要:确定变化参考物: ...

  3. 随手练——HDU-1210 洗牌问题(模拟)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1210 模拟的题目真不知道怎么写的话,就把真实情况展示出来,有图才有真相: 测试代码: #include ...

  4. linux下搭建LAMP

    PHP命令找不到:  export PATH=$PATH:/usr/local/php/bin https://www.centos.bz/forum/thread-69-1-1.html 步骤: w ...

  5. rocketmq命令【转】

    首先进入 RocketMQ 工程,进入/RocketMQ/bin   在该目录下有个 mqadmin 脚本 .  查看帮助:   在 mqadmin 下可以查看有哪些命令    a: 查看具体命令的使 ...

  6. pathinfo

    location ~ \.php { fastcgi_split_path_info ^((?U).+\.php)(/?.+)$; fastcgi_param PATH_INFO $fastcgi_p ...

  7. python接口自动化读取json,yaml配置文件+封装requests+unittest+HTMLRunner实现全自动化

    # coding=utf-8 import json import requests class TestApi(object): """ /* @param: @ses ...

  8. UVALive - 6837 Kruskal+一点性质(暴力枚举)

    ICPC (Isles of Coral Park City) consist of several beautiful islands. The citizens requested constru ...

  9. Linux内存管理-高端内存(二)

    在支持MMU的32位处理器平台上,Linux系统中的物理存储空间和虚拟存储空间的地址范围分别都是从0x00000000到0xFFFFFFFF,共4GB,但物理存储空间与虚拟存储空间布局完全不同.Lin ...

  10. xcode10不兼容问题解决方法,framework编译脚本

    XCode10报错:Build/Intermediates.noindex/XCBuildData/build.db": disk I/O error 更改-scheme 为-target ...