题目

这个需要我们瞎\(yy\)一下就能做了

我们先对于第一个串建立\(PAM\)

我们把第二个串丢上去匹配,这里匹配出来的是以每一个位置为结尾且在另一个串里存在的最长回文后缀的长度

对于每一个位置开一个计数器,统计一下这个位置被匹配到了几次

显然匹配完之后把计数器做一个子树和

最后的答案就是回文树上的每一个位置代表的回文串出现的次数乘以当前位置计数器的值,之后求一个和

记得用回文树匹配的时候需要判断到了\(1\)位置时退出

代码

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define re register
#define LL long long
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
inline int read() {char c=getchar();int x=0;while(c<'0'||x>'9') c=getchar();while(c>='0'&&c<='9') x=(x<<3)+(x<<1)+c-48,c=getchar();return x;
}
const int maxn=55555;
int son[maxn][26],fa[maxn],len[maxn],sum[maxn],val[maxn];
char S[maxn],T[maxn];
int n,m,cnt,lst;LL ans;
inline void ins(int c,int n) {int f=lst;while(S[n-len[f]-1]!=S[n]) f=fa[f];if(!son[f][c]) {int p=++cnt,k=fa[f];len[p]=len[f]+2;while(S[n-len[k]-1]!=S[n]) k=fa[k];fa[p]=son[k][c],son[f][c]=p;}++sum[lst=son[f][c]];
}
inline void find(int c,int n) {int f=lst;while(f!=1&&(T[n-len[f]-1]!=T[n]||!son[f][c])) f=fa[f];if(T[n-len[f]-1]==T[n]&&son[f][c]) ++val[lst=son[f][c]];else lst=1;
}
int main() {scanf("%s",S+1);scanf("%s",T+1);n=strlen(S+1),m=strlen(T+1);S[0]=-1;T[0]=-1;len[1]=-1,fa[0]=1;cnt=1;for(re int i=1;i<=n;i++) S[i]-='A';for(re int i=1;i<=m;i++) T[i]-='A';for(re int i=1;i<=n;i++) ins(S[i],i);for(re int i=cnt;i;--i) sum[fa[i]]+=sum[i];lst=0;for(re int i=1;i<=m;i++) find(T[i],i);for(re int i=cnt;i;--i) val[fa[i]]+=val[i];for(re int i=2;i<=cnt;i++) ans+=1ll*sum[i]*val[i];printf("%lld\n",ans);return 0;
}

转载于:https://www.cnblogs.com/asuldb/p/10784464.html

[Jsoi2013]快乐的jyy相关推荐

  1. BZOJ 4480: [Jsoi2013]快乐的jyy(回文自动机)

    Description [故事背景] JYY在JSOI有很多很多的好朋友,比如PUPPY,KFC还有PUPPUP.因为 有了这么多的好朋友,所以JYY每天都很快乐.某天,JYY发现好朋友之间关 系的好 ...

  2. 4480: [Jsoi2013]快乐的jyy

    给定两个字符串A和B,表示JYY的两个朋友的名字.我们用A(i,j)表示A 字符串中从第i个字母到第j个字母所组成的子串.同样的,我们也可以定义B(x,y). JYY发现两个朋友关系的紧密程度,等于同 ...

  3. Bzoj4480: [Jsoi2013]快乐的jyy 广义后缀自动机 倍增 哈希 manacher

    国际惯例的题面: 有人说这是回文自动机的板子题,然而我是不会这种东西的. 于是,我选择用更一般性的方法去解决这个题,就是那一堆东西了. 首先,我们把两个串同时插入一个广义SAM里,拓扑排序维护每个节点 ...

  4. BZOJ 4480 [JSOI2013] 快乐的jyy

    思路 两个字符串都插入回文自动机中(每次重置last) 最后统计两个right集合的大小就好了 代码 #include <cstdio> #include <algorithm> ...

  5. bzoj 4480: [Jsoi2013]快乐的jyy

    题意: 给两个串,求两个相同的回文串,在两个串中出现过,位置不同算不同.求方案数. 题解: 回文自动机裸题,当然bzoj3676更裸,记得有一篇博客写的很好,关于回文自动机的,但是忘了是哪篇,好像从h ...

  6. [JSOI2013]快乐的 JYY

    一.题目 点此看题 二.解法 回文自动机板题,我们先建出两个回文自动机,把每一次的LastLastLast打上标记,然后再对failfailfail树内的标记求和,算出来就是这个点的回文串出现次数.然 ...

  7. luogu P5685 [JSOI2013]快乐的 JYY(PAM,dfs,每种回文出现次数)

    题目链接:https://www.luogu.com.cn/problem/P5685 题意:给定两个长度均<=5e4的字符串.问两个字符串中有多少对相等的回文串. 题解:num统计每个字符串中 ...

  8. 【BZOJ4480】【JSOI2013】快乐的jyy(回文树)

    Description Solution 建出一个串的PAM,另一个串在上面跑,对于每个节点将第一个串的出现次数与第二个串的次数相乘即可. Code /************************ ...

  9. bzoj4479: [Jsoi2013]吃货jyy 欧拉回路+状态压缩Dp

    bzoj4479: [Jsoi2013]吃货jyy Description [故事背景] 作为JSOI的著名吃货,JYY的理想之一就是吃遍全世界的美食.要走遍全 世界当然需要不断的坐飞机了.而不同的航 ...

最新文章

  1. 汽车高级驾驶辅助系统ADAS激光雷达创新者Cepton与Growth Capital达成企业合并协议
  2. 第十六届全国大学生智能汽车竞赛总决赛 AI视觉组线上赛细则草案 - 初步版本
  3. python PyQt5 QtWidgets.QWidget.setLayout()(将布局中的小部件重新父级化,以将窗口作为父级)
  4. MySQL双主(主主)架构方案
  5. Netty学习四:Channel
  6. [转]关于多线程并发:每个开发人员都应了解的内容(转自Mainz's)
  7. 出现字迹模糊迹象_改变迹象:如何使用动态编程解决竞争性编程问题
  8. WinSock I/O 模型 -- Select 模型
  9. 晋职称不考外语 计算机,评职称不考外语计算机的价值导向
  10. ARDUINO LCD显示简单的汉字、符号(保姆级教程!)
  11. 浅谈Android自定义View
  12. b站上的计算机课程有哪些,B站课程排行榜,这届大学生最爱学什么?
  13. Python面向对象@property用法
  14. 68 个 Python 内置函数详解
  15. 《海洋测绘》:从地方坐标系到2000国家大地坐标系的转换方法
  16. Go 如何打包与压缩文件
  17. week6 视频分镜
  18. 基本概念学习(9013)---通用寄存器、机器字长、数据通路
  19. 已知两角及其夹边,解三角形
  20. 天荒地老修仙功-第六部:Spring Cloud Eureka——服务发现

热门文章

  1. 【数据库】设有一个数据库中有三个关系: 字生关系S(S#,SNAME,AGE,SEX) 课程关系C(C#,CNAME,TEACHER) 学习关系SC(s#,C#,GRADE)
  2. 典型窗口比较器电路图大全(六款典型窗口比较器电路设计原理图详解)
  3. 浏览器渲染原理的学习与总结
  4. Docker常用命令操作
  5. DataCamp中Introduction to Python之NumPy
  6. [激光器原理与应用-3]:激光器的国外品牌
  7. java判断一天是星期几_java判断今天星期几
  8. excel中如何去除空格
  9. 在Keil 中找不到对应芯片厂家的型号
  10. 远程桌面连接出现“这可能是由于CredSSP加密数据修正问题”解决方法