POJ 3729 Facer’s string (后缀数组)
来源:互联网 发布:魔兽世界国服数据库 编辑:程序博客网 时间:2024/06/05 08:27
题目大意:
串1中有多少个后缀和 串2中的某个后缀 的lcp 为 k
思路分析:
先找出 长度至少为k的对数有多少。
再找出 至少为k+1的有多少
然后相减。
#include <cstdio>#include <iostream>#include <algorithm>#include <cstring>#include <map>#include <string>#define maxn 110005using namespace std;int str[maxn];int sa[maxn],t1[maxn],t2[maxn],c[maxn],n;void suffix(int m){ int *x=t1,*y=t2; for(int i=0; i<m; i++)c[i]=0; for(int i=0; i<n; i++)c[x[i]=str[i]]++; for(int i=1; i<m; i++)c[i]+=c[i-1]; for(int i=n-1; i>=0; i--)sa[--c[x[i]]]=i; for(int k=1; k<=n; k<<=1) { int p=0; for(int i=n-k; i<n; i++)y[p++]=i; for(int i=0; i<n; i++)if(sa[i]>=k)y[p++]=sa[i]-k; for(int i=0; i<m; i++)c[i]=0; for(int i=0; i<n; i++)c[x[y[i]]]++; for(int i=0; i<m; i++)c[i]+=c[i-1]; for(int i=n-1; i>=0; i--)sa[--c[x[y[i]]]]=y[i]; swap(x,y); p=1; x[sa[0]]=0; for(int i=1; i<n; i++) x[sa[i]]=y[sa[i-1]]==y[sa[i]]&&y[sa[i-1]+k]==y[sa[i]+k]?p-1:p++; if(p>=n)break; m=p; }}int rank[maxn],height[maxn];void getheight(){ int k=0; for(int i=0; i<n; i++)rank[sa[i]]=i; for(int i=0; i<n; i++) { if(k)k--; if(!rank[i])continue; int j=sa[rank[i]-1]; while(str[i+k]==str[j+k])k++; height[rank[i]]=k; }}int tmp[50005];int solve(int k,int nn){ int ans=0; int res=0,ret=0; for(int i=1; i<n; i++) { if(height[i]<k) { if(ret) ans+=res; res=ret=0; if(sa[i]<nn)res++; else ret++; } else { if(sa[i]<nn)res++; else ret++; } } if(ret)ans+=res; return ans;}int main(){ int nn,mm,k; while(scanf("%d%d%d",&nn,&mm,&k)!=EOF) { int top=0; for(int i=1; i<=nn; i++) { scanf("%d",&tmp[i]); tmp[i]+=2; str[top++]=tmp[i]; } str[top++]=1; for(int i=1; i<=mm; i++) { scanf("%d",&tmp[i]); tmp[i]+=2; str[top++]=tmp[i]; } str[top++]=0; n=top; suffix(10005); getheight(); printf("%d\n",solve(k,nn)-solve(k+1,nn)); } return 0;}
0 0
- POJ 3729 Facer’s string (后缀数组)
- POJ 3729 Facer’s string(后缀数组)
- POJ 3729 Facer's string (后缀数组)
- POJ 3729 Facer’s string (后缀数组 两串后缀的LCP为K的对数)
- POJ 3729 Facer’s string
- POJ 3729 Facer’s string
- POJ 3729 Facer’s string 笔记
- POJ题目3229 Facer’s string(后缀数组求a串长度为k子串有几个出现在b串)
- POJ-3717-Facer's Chocolate Dream
- 【后缀数组】 HDOJ 5030 Rabbit's String
- HDU 5030 Rabbit's String 后缀数组
- hdu 5030 Rabbit's String(后缀数组)
- hdu5030 Rabbit's String 后缀数组
- HDU 5030 Rabbit's String 后缀数组 二分 构造
- Hdu 5030 Rabbit's String (后缀数组)
- hdu 5030 Rabbit's String(后缀数组&二分)
- poj 1743 后缀数组
- POJ 2758 后缀数组
- 2014.7.2
- sql-server 2005数据库文件恢复(检测到基于一致性的逻辑 I/O 错误)
- 在UI中动态更新Fragment中的控件监听,显示等
- BinaryTreeInorder(leetcode)
- 利用Powershell获取公司内部机器的资源信息,作为企业后续资产管理的基本途径!
- POJ 3729 Facer’s string (后缀数组)
- java 静态导入
- 3、文字及字体、菜单按钮、几何绘制
- 黑马程序员——黑马学习日志之十 集合(一)
- BinaryTreeInorder(leetcode)
- ASP.NET MVC Model绑定(五)
- 最大化利用内核资源进行Linux驱动开发--摘自《嵌入式Linux驱动模板精讲与项目实践》
- IObjectSafety.txt
- IOS TableView Cell重用机制及TableView常用Code