#include <bits/stdc++.h>
#define Sigma 30
#define MAXN 500010
#define int long long
using namespace std ;
int n, m, ans1, ans2 ; char s[MAXN], t[MAXN] ;
struct PAM{
int rt0, rt1, last, sz, f[MAXN], ch[MAXN][Sigma], fail[MAXN], len[MAXN] ;
void Init(){
sz = -1, rt0 = ++ sz, rt1 = ++ sz ;
fail[rt0] = fail[rt1] = rt1, len[rt0] = 0, len[rt1] = -1, last = rt0 ;
}
PAM(){Init();}
void Insert(int x, int p, char *s){
int u = last ;
while (s[p] != s[p - len[u] - 1]) u = fail[u] ;
if (!ch[u][x]){
int newq = ++ sz, fa = fail[u] ;
while (s[p] != s[p - len[fa] - 1]) fa = fail[fa] ;
fail[newq] = ch[fa][x], ch[u][x] = newq, len[newq] = len[u] + 2 ;
}
last = ch[u][x], f[last] ++ ;
}
void Solve() {
for(int i=sz;i;--i) f[fail[i]] += f[i];
}
}p,q;
void dfs(int x,int y) {
if(x+y>2) {
if(p.len[x]>ans1) {
ans1=p.len[x];
ans2=1;
}
else if(p.len[x]==ans1) {
ans2++;
}
}
for(int i=1;i<=26;i++)
if(p.ch[x][i] && q.ch[y][i]) dfs(p.ch[x][i],q.ch[y][i]);
}
signed main() {
ios::sync_with_stdio(false);
cin>>n>>m>>s+1>>t+1;
for(int i=1;i<=n;i++) p.Insert(s[i]-'a'+1,i,s);
for(int i=1;i<=m;i++) q.Insert(t[i]-'a'+1,i,t);
p.Solve(); q.Solve();
dfs(1,1);dfs(0,0);
cout<<ans1<<" "<<ans2<<endl;
}

[P5555] 秩序魔咒 - 回文自动机,DFS的更多相关文章

  1. 回文自动机 + DFS --- The 2014 ACM-ICPC Asia Xi’an Regional Contest Problem G.The Problem to Slow Down You

    The Problem to Slow Down You Problem's Link: http://acm.hust.edu.cn/vjudge/problem/viewProblem.actio ...

  2. The Preliminary Contest for ICPC Asia Xuzhou 2019 G Colorful String(回文自动机+dfs)

    这题建立一棵回文树,然后用dfs搜索答案,但是有一点需要注意,就是打vis的标记时,如果标记为1,那么在好几个节点都对同一个字符i打过标记,此时的搜索从字符i点回溯,回到它的父亲节点,搜索其它的字符, ...

  3. [JSOI2013] 快乐的 JYY - 回文自动机,DFS

    #include <bits/stdc++.h> #define Sigma 30 #define MAXN 500010 #define int long long using name ...

  4. 回文树(回文自动机PAM)小结

    回文树学习博客:lwfcgz    poursoul 边写边更新,大概会把回文树总结在一个博客里吧... 回文树的功能 假设我们有一个串S,S下标从0开始,则回文树能做到如下几点: 1.求串S前缀0~ ...

  5. 后缀自动机/回文自动机/AC自动机/序列自动机----各种自动机(自冻鸡) 题目泛做

    题目1 BZOJ 3676 APIO2014 回文串 算法讨论: cnt表示回文自动机上每个结点回文串出现的次数.这是回文自动机的定义考查题. #include <cstdlib> #in ...

  6. [模板] 回文树/回文自动机 && BZOJ3676:[Apio2014]回文串

    回文树/回文自动机 放链接: 回文树或者回文自动机,及相关例题 - F.W.Nietzsche - 博客园 状态数的线性证明 并没有看懂上面的证明,所以自己脑补了一个... 引理: 每一个回文串都是字 ...

  7. BZOJ2342[Shoi2011]双倍回文——回文自动机

    题目描述 输入 输入分为两行,第一行为一个整数,表示字符串的长度,第二行有个连续的小写的英文字符,表示字符串的内容. 输出 输出文件只有一行,即:输入数据中字符串的最长双倍回文子串的长度,如果双倍回文 ...

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

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

  9. bzoj千题计划306:bzoj2342: [Shoi2011]双倍回文 (回文自动机)

    https://www.lydsy.com/JudgeOnline/problem.php?id=2342 解法一: 对原串构建回文自动机 抽离fail树,从根开始dfs 设len[x]表示节点x表示 ...

随机推荐

  1. C# 多线程的阻塞和继续-ManaulResetEvent的使用

    在工作中,会遇到需要多线程处理相应的业务需求,最典型的包括Socket的通信. 多线程处理里,就会考虑到,哪个线程先运行,哪个线程后运行的情况. 这里我介绍一下,使用ManualResetEvent类 ...

  2. PMP-番外篇-PMP工具与技术目录

    ########################################################### 这里先总结所有工具和技术,让大家有一个整体的概念. 也可以当作一个工具和技术查询 ...

  3. C# 调用WCF服务的两种方法

    项目简介 之前领导布置一个做单点登录的功能给我,实际上就是医院想做一个统一的平台来实现在这个统一的平台登录后不需要在His.Emr.Lis等系统一个个登录,直接可以登录到对应的系统,然后进行相应的操作 ...

  4. day 16内置函数总结

    reversed()l = [1,2,3,4,5]l.reverse()print(l) l = [1,2,3,4,5]l2 = reversed(l)reversed:更加节省内存资源print(l ...

  5. 整理了Linux常用命令变量

    查看信息命令 ls 查看当前目录下面的所有文件 -a 显示所有文件(包括隐藏文件) -l 显示所有文件(包括文件的详细信息) 格式: ls 参数 目录路径(绝对/相对) cd 切换目录 格式: cd ...

  6. 纪中9日T4 2298. 异或

    2298. 异或 (File IO): input:gcdxor.in output:gcdxor.out 时间限制: 1000 ms  空间限制: 262144 KB  具体限制 题目描述 Sarv ...

  7. yii 日志和事件

    日志 配置 'log' => [ 'traceLevel' => YII_DEBUG ? 3 : 0, 'targets' => [ [ 'class' => 'yii\log ...

  8. phpcmsv9 后台统计编辑发稿数量

    直切正题: 每个人,每个栏目,发稿数量统计 SELECT a.realname AS 姓名, c.catname AS 栏目名称, count(1) AS 发稿量FROM v9_news bz, v9 ...

  9. jQuery笔记(五)jQuery表单验证

    前言 上次我们说完jQuery中的动画之后,我们再来看一种jQuery在Web网页应用最为广泛的一种形式,这就是jQuery对表单的操作,通过jQuery对表单的操作,可以有效的提高用户体验.在此之前 ...

  10. vue 学习2

    模板指令.属性总结 html 中的标签属性 1. :class 值是对象,key为class 的值,值为boolean类型 html标签任意属性都可以:属性,表示动态值(值是变化的,不是固定不变的) ...