博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【POJ】3415 Common Substrings
阅读量:5318 次
发布时间:2019-06-14

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

1 #include
2 #include
3 typedef __int64 LL; 4 #define MAXN 200010 5 char s[MAXN]; 6 int wa[MAXN],wb[MAXN],wv[MAXN],ws[MAXN]; 7 int sa[MAXN],height[MAXN],rk[MAXN]; 8 int stk[MAXN],cnt[MAXN]; 9 inline bool cmp(int *r,int a,int b,int len) 10 { 11 return r[a]==r[b]&&r[a+len]==r[b+len]; 12 } 13 void SA(int n,int m) 14 { 15 int i,j,p,*x=wa,*y=wb,*t; 16 for(i=0;i
=0;i--) 23 sa[--ws[x[i]]]=i; 24 for(j=p=1;p
<<=1,m=p) 25 { 26 for(p=0,i=n-j;i
=j) 31 y[p++]=sa[i]-j; 32 } 33 for(i=0;i
=0;i--) 40 sa[--ws[wv[i]]]=y[i]; 41 for(t=x,x=y,y=t,x[sa[0]]=0,p=i=1;i
=k) 69 height[i]-=k-1; 70 else 71 height[i]=0; 72 } 73 ans=temp=0; 74 top=-1; 75 for(i=1;i<=n;i++) 76 { 77 for(size=0;top>-1&&stk[top]>height[i];top--) 78 { 79 size+=cnt[top]; 80 temp+=(height[i]-stk[top])*cnt[top]; 81 } 82 stk[++top]=height[i]; 83 cnt[top]=size; 84 if(sa[i-1]
len) 90 ans+=temp; 91 } 92 temp=0; 93 top=-1; 94 for(i=1;i<=n;i++) 95 { 96 for(size=0;top>-1&&stk[top]>height[i];top--) 97 { 98 size+=cnt[top]; 99 temp+=(height[i]-stk[top])*cnt[top];100 }101 stk[++top]=height[i];102 cnt[top]=size;103 if(sa[i-1]>len)104 {105 temp+=height[i];106 cnt[top]++;107 }108 if(sa[i]

转载于:https://www.cnblogs.com/DrunBee/archive/2012/07/10/2585184.html

你可能感兴趣的文章
@Component 和 @Bean 的区别
查看>>
Linux安全篇-iptables
查看>>
div中溢出文字用点代替
查看>>
UVA - 489 Hangman Judge
查看>>
返回一个一维数组环中的数相加的最大的和
查看>>
55分钟学会正则表达式
查看>>
python1119-20181205作业-郭恩赐提交
查看>>
LA3490 Generator(KMP + 高斯消元)
查看>>
kaldi学习 - 一脚本流学习工具使用
查看>>
vSphere SDK for Java 示例
查看>>
AOj448有趣的矩阵
查看>>
字符串比较——compareTo函数
查看>>
Eclipse使用过程中出现java.lang.NoClassDefFoundError的解决方案
查看>>
Attribute "resultClass" must be declared for element type "insert".
查看>>
字符串的排列
查看>>
[洛谷P1430]序列取数
查看>>
SQL Server数据库开发中的十大问题
查看>>
C++ string、char *、char[]、const char*
查看>>
配置WinRM的Https
查看>>
构建之法阅读笔记04
查看>>