博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Bzoj3230: 相似子串
阅读量:5107 次
发布时间:2019-06-13

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

题解:后缀数组的特性我们可以通过对于这个位置比较前一个位置的h值来解决以i位置为起点的后缀能产生多少个和前面的串不同的子串 所以问题转化为 求第k大出现的位置 二分找就ok 然后找出来的位置求一下lcp 然后反过来再求一下就ok

#include 
#define ll long longconst int MAXN=1e5+10;using namespace std;char s1[MAXN],s2[MAXN];int txt[MAXN],sa[MAXN],td[MAXN],rank1[MAXN],rank2[MAXN],t1[MAXN],t2[MAXN];int dp[MAXN][21];int mu[21];int ma[MAXN];bool cmp(int f[],int t,int w,int k){return f[t]==f[w]&&f[t+k]==f[w+k];}ll ans[MAXN];void Sa(char str[]){ // cout<
<
=0;i--)sa[--txt[str[i]]]=i; for(int k=1;k<=len;k=k*2){ int p=0; for(int i=len-k;i
=k)td[p++]=sa[i]-k; for(int i=0;i
=0;i--)sa[--txt[rank1[td[i]]]]=td[i]; swap(rank1,td);rank1[sa[0]]=0;p=1; for(int i=1;i
r)return MAXN; int k=ma[r-l+1]; return min(dp[l][k],dp[r-mu[k]+1][k]);}typedef struct node{ ll l,r;int lx,rx,ly,ry;}node;node que[MAXN];int q;int check(ll k,int len){ int l=1;int r=len-1; while(l<=r){ int mid=(l+r)>>1; if(sum[mid-1]
=k)return mid; else if(sum[mid-1]>=k)r=mid-1; else l=mid+1; } return len;}void slove(){ Sa(s1);hh(s1);int len=strlen(s1);st(len); // cout<
<<" "<
=len||que[i].ly>=len){ ans[i]=-1;continue; } que[i].rx=que[i].l-sum[que[i].lx-1]+h[que[i].lx];que[i].ry=que[i].r-sum[que[i].ly-1]+h[que[i].ly];// cout<
<<"----"<
<
r)swap(l,r);l++; ll k1=1ll*min(que[i].lx,min(que[i].ly,rmq(l,r))); ans[i]+=1ll*k1*k1; }}int main(){ mu[0]=1;for(int i=1;i<=20;i++)mu[i]=mu[i-1]<<1; ma[0]=-1;for(int i=1;i

 

3230: 相似子串

Time Limit: 20 Sec  Memory Limit: 128 MB
Submit: 1980  Solved: 515
[][][]

Description

Input

输入第1行,包含3个整数N,Q。Q代表询问组数。

第2行是字符串S。
接下来Q行,每行两个整数i和j。(1≤i≤j)。

Output

输出共Q行,每行一个数表示每组询问的答案。如果不存在第i个子串或第j个子串,则输出-1。

Sample Input

5 3
ababa
3 5
5 9
8 10

Sample Output

18
16
-1

HINT

样例解释

第1组询问:两个子串是“aba”,“ababa”。f = 32 + 32 = 18。
第2组询问:两个子串是“ababa”,“baba”。f = 02 + 42 = 16。
第3组询问:不存在第10个子串。输出-1。

 

数据范围

N≤100000,Q≤100000,字符串只由小写字母'a'~'z'组成

转载于:https://www.cnblogs.com/wang9897/p/9212721.html

你可能感兴趣的文章
EnterKey转换为TabKey(兼容IE,Firefox)
查看>>
包含列的索引:SQL Server索引的阶梯级别5
查看>>
Python 中的重点来了 : 迭代器 生成器
查看>>
二进制安装mysql
查看>>
Python 生成哈希hash--hashlib模块
查看>>
myeclipse插件安装
查看>>
最近看NCZ的JS高级程序设计整理的一些代码
查看>>
浙江省第十二届省赛 Beauty of Array(思维题)
查看>>
NOIP2013 提高组 Day1
查看>>
UVA 1602 Lattice Animals
查看>>
bzoj千题计划219:bzoj1568: [JSOI2008]Blue Mary开公司
查看>>
[笔记]STM32使用非8M晶振时如何修改代码
查看>>
个人对vue生命周期的理解
查看>>
cocos2dx 3.x simpleAudioEngine 长音效被众多短音效打断问题
查看>>
Section 1.2 dualpal
查看>>
存储(硬件方面的一些基本术语)
查看>>
Dithering-视觉的奇特现象
查看>>
观察者模式
查看>>
转】MyEclipse使用总结——MyEclipse文件查找技巧
查看>>
Weka中数据挖掘与机器学习系列之基本概念(三)
查看>>