bzoj4480: [Jsoi2013]快乐的jyy
2024-08-24 19:48:51
【问题描述】
给定两个字符串A和B,表示JYY的两个朋友的名字。我们用A(i,j)表示A
字符串中从第i个字母到第j个字母所组成的子串。同样的,我们也可以定义B(x,y)。
JYY发现两个朋友关系的紧密程度,等于同时满足如下条件的四元组(i,j,x,y)
的个数:
1:1<=i<=j<=|A|
2:1<=x<=y<=|B|
3:A(i,j)=B(x,y)
4:A(i,j)是回文串
这里表示字符串A的长度。
JYY希望你帮助他计算出这两个朋友之间关系的紧密程度。
建两个串的回文树,算出每个本质不同的回文串在两个串中出现次数,乘起来相加。
#include<bits/stdc++.h>
typedef long long i64;
const int N=1e5+;
char s1[],s2[];
int nx[N][],fa[N],l[N],t[N][],pv=,ptr=;
int gf(int w,char*s,int i){
while(s[i]!=s[i--l[w]])w=fa[w];
return w;
}
void ins(char*s,int x){
int c=s[x]-'A',p=gf(pv,s,x);
if(!nx[p][c]){
int np=nx[p][c]=++ptr;
l[np]=l[p]+;
fa[np]=p==?:gf(fa[p],s,x)[nx][c];
}
pv=nx[p][c];
++t[pv][s==s2];
}
int main(){
l[]=-;
fa[]=fa[]=;
scanf("%s%s",s1+,s2+);
s1[]=s2[]=-;
for(int i=;s1[i];++i)ins(s1,i);
pv=;
for(int i=;s2[i];++i)ins(s2,i);
i64 ans=;
for(int w=ptr;w>;--w){
int f=fa[w];
for(int d=;d<;++d)t[f][d]+=t[w][d];
ans+=i64(t[w][])*t[w][];
}
printf("%llu\n",ans);
return ;
}
最新文章
- atom-shell程序打包
- 基于Metronic的Bootstrap开发框架经验总结(10)--优化Bootstrap图标管理
- Java web 项目的相对路径的使用
- ftp 530 This FTP serveris anonymous only,
- 如何获得 request, ";request.getSession(true).setAttribute(";a";,a);";与“request.setAttribute(";a";,a);”区别
- 【bzoj1016】 JSOI2008—最小生成树计数
- CTF
- Spring、Struts2+Spring+Hibernate整合步骤
- RTMPdump(libRTMP) 源代码分析 6: 建立一个流媒体连接 (NetStream部分 1)
- Linux操作oracle——关闭、停止、重启
- C++ 50学习 之提高对 C++的认识
- JavaScript基础要点
- js 数组的操作
- docker swarm英文文档学习-8-在集群中部署服务
- Django 模板语言 路由 视图
- Spark项目之电商用户行为分析大数据平台之(九)表的设计
- jQuery制作鼠标经过显示图片大图,生成图片tips效果
- poj 1719 Shooting Contest (二分匹配)
- 将本地web项目发布到ubuntu上并运行 第一个本地的.net core2.0项目
- 在linux下安装配置rabbitMQ详细教程
热门文章
- websocket介绍 以及 vue websocket使用案例
- ACM-ICPC 2018 沈阳赛区网络预赛-D:Made In Heaven(K短路+A*模板)
- 《DSP using MATLAB》Problem 6.1
- Sping--注解(一) 常用注解总结
- 【BZOJ3244】【UOJ#122】【NOI2013]树的计数
- cdcq的独立博客上线辣!->; http://cdcq.coding.me/blog/
- 【java编程】java中什么是bridge method(桥接方法)
- flex布局居中无效果注意是否设置了宽度
- linux运维注意事项
- 使用dynamic和MEF实现轻量级的AOP组件 ---- 系列文章