【问题描述】

给定两个字符串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 ;
}

bzoj4480: [Jsoi2013]快乐的jyy的更多相关文章

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

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

  2. BZOJ 4480 [JSOI2013] 快乐的jyy

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

  3. [Jsoi2013]快乐的jyy

    题目 这个需要我们瞎\(yy\)一下就能做了 我们先对于第一个串建立\(PAM\) 我们把第二个串丢上去匹配,这里匹配出来的是以每一个位置为结尾且在另一个串里存在的最长回文后缀的长度 对于每一个位置开 ...

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

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

  5. 「JSOI2013」侦探jyy

    「JSOI2013」侦探jyy 传送门 个人感觉我写的复杂度不够优秀啊,但是好像没有别的办法了... 我们枚举每个点,考虑这个点能不能不发生. 首先我们从这个点开始,在反图上面 \(\text{BFS ...

  6. BZOJ4479 [JSOI2013] 吃货jyy 解题报告(三进制状态压缩+欧拉回路)

    题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=4479 Description [故事背景]作为JSOI的著名吃货,JYY的理想之一就是吃 ...

  7. BZOJ4479 : [Jsoi2013]吃货jyy

    若$k\leq 15$,那么可以设$d[i][S]$表示经过了$S$集合的边,现在位于$i$点的最短路. 可以用Dijkstra算法在$O(n^22^k)$时间内求出. 否则若$k>15$,那么 ...

  8. BZOJ 4479: [Jsoi2013]吃货jyy

    一句话题意:求必须包含某K条边的回路(回到1),使得总权值最小 转化为权值最小的联通的偶点 令F[i]表示联通状态为i的最小权值,(3^n状压)表示不在联通块内/奇点/偶点,连边时先不考虑必选的边的度 ...

  9. [暑假的bzoj刷水记录]

    (这篇我就不信有网站来扣) 这个暑假打算刷刷题啥的 但是写博客好累啊  堆一起算了 隔一段更新一下.  7月27号之前刷的的就不写了 , 写的累 代码不贴了,可以找我要啊.. 2017.8.27upd ...

随机推荐

  1. Build Tool(构建工具)

    what: 构建工具能够帮助你创建一个可重复的.可靠的.携带的且不需要手动干预的构建.构建工具是一个可编程的工具,它能够让你以可执行和有序的任务来表达自动化需求.假设你想要编译源代码,将生成的clas ...

  2. 管道符和作业 shell变量 环境变量

    管道符  |      前一个命令的输出,变成后一个命令的输入 ctrl +z   暂停 bg  cmd   后台运行 fg  #  调回前台 直接让程序进入后台,可以在后面加上 cmd    &am ...

  3. linux下使用小票打印

    linux下使用小票打印 打印机: Xprinter XP-58IIH指令支持: ESC/POS接口: USB, 蓝牙 Linux系统: Centos7 蓝牙配对很快, 配对好后就是连接状态. 但很快 ...

  4. 03 重定向,请求转发,cookie,session

    重定向: /* 之前的写法 response.setStatus(302); response.setHeader("Location", "login_success. ...

  5. 直面Java 第002期

    . Java和C++同为面向对象语言,Java和C++主要区别有哪些?双方个有哪些优缺点? 解: C++ 被设计成主要用在系统性应用程序设计上的语言,对C语言进行了扩展.对于C语言这个为运行效率设计的 ...

  6. 多线程线性 lock

    有时我们lock一段代码或许要根据某个变量的值,值相同则不允许有两个或以上的方法并行运行,我在工作中就遇到了,有100个值,相同的参数值不能并行运行. 还有就是一个被lock的方法递归调用会不会死锁, ...

  7. Centos7修改默认最大文件打开数

    方法一: [root@bogon ~]# vi /etc/systemd/system.conf [root@bogon ~]# cat /etc/systemd/system.conf # This ...

  8. gdb入门

    下面是我自己写的一个测试用例 a.c #include<stdio.h> int add(int a,int b){ return a+b; } int main(){ int n=add ...

  9. centos 7.0 lnmp成功安装过程(很乱)

    下载nginx [root@localhost src]# wget http://nginx.org/download/nginx-1.7.9.tar.gz --2015-01-24 12:55:2 ...

  10. SharePoint Online 使用 adal js 获取access token

    最近在写一些SharePoint 的sample code, 有兴趣的小伙伴可以查看我的GitHub. 今天给大家介绍SharePoint Framework (SPFx  )web part 当中怎 ...