博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ 1226 Substrings(后缀数组)
阅读量:6950 次
发布时间:2019-06-27

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

题目链接:http://poj.org/problem?id=1226

题意:给定n个串。求一个最长的串,使得这个串或者其反串在每个串中都出现过?

思路:二分。

int r[N],sa[N],wa[N],wb[N],wd[N],rank[N],h[N];int cmp(int *r,int a,int b,int len){    return r[a]==r[b]&&r[a+len]==r[b+len];}void da(int *r,int *sa,int n,int m){    int i,j,p,*x=wa,*y=wb,*t;    FOR0(i,m) wd[i]=0;    FOR0(i,n) wd[x[i]=r[i]]++;    FOR1(i,m-1) wd[i]+=wd[i-1];    FORL0(i,n-1) sa[--wd[x[i]]]=i;    for(j=1,p=1;p
<<=1,m=p) { p=0; FOR(i,n-j,n-1) y[p++]=i; FOR0(i,n) if(sa[i]>=j) y[p++]=sa[i]-j; FOR0(i,m) wd[i]=0; FOR0(i,n) wd[x[i]]++; FOR1(i,m-1) wd[i]+=wd[i-1]; FORL0(i,n-1) sa[--wd[x[y[i]]]]=y[i]; t=x;x=y;y=t;p=1;x[sa[0]]=0; FOR1(i,n-1) x[sa[i]]=cmp(y,sa[i-1],sa[i],j)?p-1:p++; }}void calHeight(int *r,int *sa,int n){ int i,j,k=0; FOR1(i,n) rank[sa[i]]=i; FOR0(i,n) { if(k) k--; j=sa[rank[i]-1]; while(i+k
m) break; R=L; while(R<=m&&h[R]>=x) R++; clr(hash,0); FOR(j,L-1,R-1) if(b[sa[j]]!=-1) { hash[b[sa[j]]]=1; } FOR1(j,n) if(!hash[j]) break; if(j>n) return 1; i=R; } return 0;}void deal(){ int low=0,high=100,mid; while(low<=high) { mid=(low+high)>>1; if(OK(mid)) low=mid+1; else high=mid-1; } if(low<=100&&OK(low)) PR(low); else if(high>=0&&OK(high)) PR(high);}int main(){ int C; RD(C); while(C--) { RD(n); int i,j,L=0,len,Max=130; FOR1(i,n) { RD(s); len=strlen(s); FOR0(j,len) r[L++]=s[j],b[L-1]=i; r[L++]=Max++; b[L-1]=-1; FORL0(j,len-1) r[L++]=s[j],b[L-1]=i; r[L++]=Max++; b[L-1]=-1; } r[L]=0; da(r,sa,L+1,Max); calHeight(r,sa,L); m=L; deal(); } return 0;}

  

转载地址:http://hocil.baihongyu.com/

你可能感兴趣的文章
Jsoup后台解析html、jsp网页
查看>>
JsonModel 的使用
查看>>
病毒分裂 NOIP模拟 矩阵快速幂 分治数列求和
查看>>
[WorldFinal 2012E]Infiltration(dfs+图论)
查看>>
【BZOJ】1443: [JSOI2009]游戏Game
查看>>
获取控制器 nextResponder的简单应用
查看>>
2014.5.17—所谓生活,就是让自己变得更好
查看>>
TensorFlow官方文档学习02-MNIST初级课程
查看>>
OpenGL ES入门: 渲染金字塔 - 颜色、纹理、纹理与颜色混合填充以及GLKit实现
查看>>
Predicate和Consumer应用
查看>>
分金币 Uva 11300
查看>>
Objective-C 数组、可变数组
查看>>
.net XML的序列化
查看>>
第八次个人作业
查看>>
三取方格数
查看>>
如何高效读写百万级的Excel?
查看>>
url两次编码
查看>>
正则表达式相关
查看>>
[转]hisi mmz模块驱动讲解
查看>>
二叉树非递归先中后序遍历 及 非递归交换二叉树两个孩子的位置
查看>>