博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
找相同字符串(非AC代码,luogu上第一个点过不了TAT)
阅读量:5037 次
发布时间:2019-06-12

本文共 1612 字,大约阅读时间需要 5 分钟。

如题目所言

恳请大佬赐教。。。

题目描述

给定两个字符串,求出在两个字符串中各取出一个子串使得这两个子串相同的方案数。两个方案不同当且仅当这两个子串中有一个位置不同。

输入输出格式

输入格式:

两行,两个字符串s1,s2,长度分别为n1,n2。1 <=n1, n2<= 200000,字符串中只有小写字母

输出格式:

输出一个整数表示答案

输入输出样例

输入样例#1:

aabb
bbaa

输出样例#1:

10

不会后缀自动机,所以后缀数组搞:

把两个串用一个很大的字符连接起来,求一个后缀数组。
考虑怎样暴力的算答案。
在rak数组中从前往后枚举起点,对于每个枚举的起点,
都暴力的往后扫,扫的过程中维护一个hei的最小值。
每到一个点的时候,如果这个点跟起点不属于一个串,
就将答案加上当前的最小值,这样是O(n2)的

考虑这个还能怎么算。

可以发现我们是维护hei的最小值。
那么我们要将hei排序,a[i]记录的就是排第i位的hei的编号
编号为0的后缀没有什么贡献,所以我们直接continue
处理每一个后缀时,我们凭借hei从大向小扫,
而每个hei[i]都与hei[i-1]有关
毕竟hei数组是按照sa数组中的排序计算的。。。
hei[i]与hei[i-1]对应的数组一定最相像
这样每次需要用的就是当前的hei。

扫的过程中用并查集维护一下每个串分别对哪些串有贡献的

(也就是hei数组的贡献)。
用乘法原理算一下当前的hei会有多少贡献。
就是用当前的hei乘上这个串和上一个串分别对
于两个不同的原串的乘积的和。 //注意:不同的!!!

这里写代码片#include
#include
#include
#include
#include
#define LL long longusing namespace std;const int N=400100;int s[N];char s1[N];int cc[N],hei[N],rak[N],len,sa[N],a[N],b[N],l;int fa[N],st[N],ed[N]; int cmp2(const int &a,const int &b){ return hei[a]>hei[b];}int cmp(int *y,int a,int b,int k){ int ra1=y[a]; int rb1=y[b]; int ra2=a+k>=len ? -1:y[a+k]; int rb2=b+k>=len ? -1:y[b+k]; return ra1==rb1&&ra2==rb2;}void make_sa(){ int i,k,m,p; m=28; //最大到27 int *t,*x=a,*y=b; for (i=0;i
=0;i--) sa[--cc[x[i]]]=i; for (k=1;k<=len;k<<=1) { p=0; for (i=len-k;i
=k) y[p++]=sa[i]-k; for (i=0;i
=0;i--) sa[--cc[x[y[i]]]]=y[i]; t=x;x=y;y=t; x[sa[0]]=0; p=1; for (i=0;i
=len) break; m=p; } return;}void make_hei(){ int i,k=0; for (i=0;i

转载于:https://www.cnblogs.com/wutongtong3117/p/7673626.html

你可能感兴趣的文章
Android 音量调节
查看>>
HTML&CSS基础学习笔记1.28-给网页添加一个css样式
查看>>
windows上面链接使用linux上面的docker daemon
查看>>
Redis事务
查看>>
Web框架和Django基础
查看>>
python中的逻辑操作符
查看>>
CSS兼容性常见问题总结
查看>>
HDU 1548 A strange lift (Dijkstra)
查看>>
每天一个小程序—0005题(批量处理图片大小)
查看>>
C# 启动进程和杀死进程
查看>>
tcp实现交互
查看>>
IIS的各种身份验证详细测试
查看>>
JavaScript特效源码(3、菜单特效)
查看>>
聊聊、Zookeeper Linux 单服务
查看>>
Linux常用命令总结
查看>>
KRPano动态热点专用素材图50多个,加动态热点使用方法
查看>>
yii模型ar中备忘
查看>>
C#线程入门
查看>>
CSS清除浮动方法
查看>>
JVM内存回收机制简述
查看>>