BZOJ 4480 [JSOI2013] 快乐的jyy
思路
两个字符串都插入回文自动机中(每次重置last)
最后统计两个right集合的大小就好了
代码
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
int Nodecnt,cnt[50100][2],trans[50100][26],fail[50100],len[50100],s[2][50100],last,n;
long long ans=0;
char S[50100];
int New_state(int _len){
len[Nodecnt]=_len;
return Nodecnt++;
}
int getfail(int p,int n,int which){
while(s[which][n-len[p]-1]!=s[which][n])
p=fail[p];
return p;
}
void add_len(int n,int which){
int cur=getfail(last,n,which);
if(!trans[cur][s[which][n]]){
int t=New_state(len[cur]+2);
fail[t]=trans[getfail(fail[cur],n,which)][s[which][n]];
trans[cur][s[which][n]]=t;
}
cnt[trans[cur][s[which][n]]][which]++;
last=trans[cur][s[which][n]];
}
int main(){
s[0][0]=-1;
s[1][0]=-1;
New_state(0);
New_state(-1);
fail[0]=1;
last=0;
scanf("%s",S+1);
n=strlen(S+1);
for(int i=1;i<=n;i++){
S[i]-='A';
s[0][i]=S[i];
add_len(i,0);
}
last=0;
scanf("%s",S+1);
n=strlen(S+1);
for(int i=1;i<=n;i++){
S[i]-='A';
s[1][i]=S[i];
add_len(i,1);
}
for(int i=Nodecnt-1;i>=0;i--)
cnt[fail[i]][0]+=cnt[i][0],cnt[fail[i]][1]+=cnt[i][1];
for(int i=2;i<Nodecnt;i++)
ans=(1LL*ans+1LL*cnt[i][0]*cnt[i][1]);
printf("%lld\n",ans);
return 0;
}
BZOJ 4480 [JSOI2013] 快乐的jyy的更多相关文章
- Bzoj4480: [Jsoi2013]快乐的jyy 广义后缀自动机 倍增 哈希 manacher
国际惯例的题面:有人说这是回文自动机的板子题,然而我是不会这种东西的.于是,我选择用更一般性的方法去解决这个题,就是那一堆东西了.首先,我们把两个串同时插入一个广义SAM里,拓扑排序维护每个节点的pa ...
- bzoj4480: [Jsoi2013]快乐的jyy
[问题描述] 给定两个字符串A和B,表示JYY的两个朋友的名字.我们用A(i,j)表示A 字符串中从第i个字母到第j个字母所组成的子串.同样的,我们也可以定义B(x,y). JYY发现两个朋友关系的紧 ...
- [Jsoi2013]快乐的jyy
题目 这个需要我们瞎\(yy\)一下就能做了 我们先对于第一个串建立\(PAM\) 我们把第二个串丢上去匹配,这里匹配出来的是以每一个位置为结尾且在另一个串里存在的最长回文后缀的长度 对于每一个位置开 ...
- BZOJ 4479: [Jsoi2013]吃货jyy
一句话题意:求必须包含某K条边的回路(回到1),使得总权值最小 转化为权值最小的联通的偶点 令F[i]表示联通状态为i的最小权值,(3^n状压)表示不在联通块内/奇点/偶点,连边时先不考虑必选的边的度 ...
- [JSOI2013] 快乐的 JYY - 回文自动机,DFS
#include <bits/stdc++.h> #define Sigma 30 #define MAXN 500010 #define int long long using name ...
- 「JSOI2013」侦探jyy
「JSOI2013」侦探jyy 传送门 个人感觉我写的复杂度不够优秀啊,但是好像没有别的办法了... 我们枚举每个点,考虑这个点能不能不发生. 首先我们从这个点开始,在反图上面 \(\text{BFS ...
- 【题解】bzoj 4478 [Jsoi2013]侦探jyy
原题传送门 弱智搜索题 我们就枚举每个点,先判断它是否必须发生,如果没有必须发生,开始搜索它的祖先,如果祖先中有必须发生的,那么它就必须发生,如果祖先中没有必须发生的,那么搜索所有入度为0的点(除了它 ...
- bzoj 4459: [Jsoi2013]丢番图 -- 数学
4459: [Jsoi2013]丢番图 Time Limit: 10 Sec Memory Limit: 64 MB Description 丢番图是亚历山大时期埃及著名的数学家.他是最早研究整数系 ...
- bzoj 4465: [Jsoi2013]游戏中的学问
4465: [Jsoi2013]游戏中的学问 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 121 Solved: 59[Submit][Statu ...
随机推荐
- npm 发布包(publish)
λ npm init // 建包,信息填写好 λ npm adduser // 创建npm账户 填写账号,密码,邮箱 λ npm whoami // 查看当前登录的是谁 ajanuw 登录 λ npm ...
- yarn卸载或增加节点
yarn卸载或增加节点 卸载节点或者增加节点: 方式一:静态的增添删除:将集群关闭,修改配置文件(etc/hadoop/slaves),重新启动集群(很黄很暴力,不够人性化). 方式二:动态的增加 ...
- Python学习之旅(三十)
Python基础知识(29):virtualenv virtualenv:用来为一个应用创建一套隔离的Python运行环境 比如,现有两个Python项目,一个是Python2.7的一个是Python ...
- PAT甲级1080 Graduate Admission【模拟】
题目:https://pintia.cn/problem-sets/994805342720868352/problems/994805387268571136 题意: 模拟高考志愿录取. 考生根据总 ...
- Kruskal和prime算法的类实现,图的遍历BFS算法。
一.图的遍历 #include<iostream> #include<queue> #include<vector> using namespace std; in ...
- npm笔记
#执行npm start时是运行的哪个js文件? 打开package.json看看scripts属性中start配置的是什么运行脚本,这里配置的就是你执行npm start时跑的脚本 #设置npm的源 ...
- ES6 对象
对象字面量 属性的简洁表示法 ES6允许对象的属性直接写变量,这时候属性名是变量名,属性值是变量值. const age = 12; const name = "Amy"; con ...
- LaTeX大于小于号
发现大部分人只回答大于等于号.小于等于号的写法,而没有说大于.小于号的分别写法. 大于号:\textgreater 小于号: \textless 下面的后面要加空格,否则会识别错误 大于等于:\geq ...
- 苹果cms安装及配置详细教程
听说这个好!php+mysql的 下载 http://www.maccms.com/down.html 下载之后解压到你的网站跟目录中,就像这个样子的 后台目录 然后重要的一步来了,在ftp工具上 ...
- 判断np.array里面为空字符串的方法
#多在编译器里尝试新操作 import numpy as np for i range(100): eval1 = {"A": ''"} eval2 = {"A ...