[BJWC2010] 外星联络

Description

求一个 \(01\) 串中所有重复出现次数大于 \(1\) 的子串所出现的次数,按照字典序排序输出。

Solution

预处理出后缀数组和高度数组。

对于每一个后缀 \(i\) ,如果 \(h[i+1]>h[i]\) ,我们就去找到在这之后对任意 \(j \in (h[i], h[i+1]]\) ,第一次出现 \(h[k]<j\) 的 \(k\) ,那么 \(k-i\) 就是这个子串出现的次数。

很不优美的解法,但是好像又没有别的办法。还不如直接建字典树。

#include <bits/stdc++.h>
using namespace std; int n,m=256,sa[1000005],y[1000005],u[1000005],v[1000005],o[1000005],r[1000005],h[1000005],T; char str[1000005];
long long ans; int main()
{
ios::sync_with_stdio(false);
cin>>n;
cin>>str+1; for(int i=1; i<=n; i++) u[str[i]]++;
for(int i=1; i<=m; i++) u[i]+=u[i-1];
for(int i=n; i>=1; i--) sa[u[str[i]]--]=i;
r[sa[1]]=1;
for(int i=2; i<=n; i++) r[sa[i]]=r[sa[i-1]]+(str[sa[i]]!=str[sa[i-1]]); for(int l=1; r[sa[n]]<n; l<<=1)
{
memset(u,0,sizeof u);
memset(v,0,sizeof v);
memcpy(o,r,sizeof r);
for(int i=1; i<=n; i++) u[r[i]]++, v[r[i+l]]++;
for(int i=1; i<=n; i++) u[i]+=u[i-1], v[i]+=v[i-1];
for(int i=n; i>=1; i--) y[v[r[i+l]]--]=i;
for(int i=n; i>=1; i--) sa[u[r[y[i]]]--]=y[i];
r[sa[1]]=1;
for(int i=2; i<=n; i++) r[sa[i]]=r[sa[i-1]]+((o[sa[i]]!=o[sa[i-1]])||(o[sa[i]+l]!=o[sa[i-1]+l]));
}
{
int i,j,k=0;
for(int i=1; i<=n; h[r[i++]]=k)
for(k?k--:0,j=sa[r[i]-1]; str[i+k]==str[j+k]; k++);
} for(int i=1; i<=n; i++)
{
int l=h[i],r=h[i+1];
if(l<r)
{
//cout<<"l="<<l<<" r="<<r<<endl;
vector <int> tmp;
++l;
for(int j=i+1; j<=n+1 && l<=r; j++)
{
while(r>h[j]&&l<=r)
{
tmp.push_back(j-i);
--r;
}
}
for(int j=tmp.size()-1; j>=0; --j)
cout<<tmp[j]<<endl;
}
}
}

最新文章

  1. Photo Kit 框架
  2. C# 启动关闭.exe进程(转)
  3. 《day06---面向对象入门》
  4. Date与Calendar
  5. PAT (Advanced Level) 1050. String Subtraction (20)
  6. cocos studio UI 1.6.0.0 修改导出项目路径
  7. 【前端】Vue2全家桶案例《看漫画》之四、漫画页
  8. shell的date命令:使用方法,以及小时、分钟的计算
  9. java代码之美(7)---guava之Bimap
  10. electron+antd详细教程
  11. 平均精度均值(mAP)——目标检测模型性能统计量
  12. Web服务常见问题
  13. 79、iOS 的Cocoa框架、Foundation框架以及UIKit框架
  14. 安装astrixx firefox插件
  15. 响应式布局css样式
  16. 进入python世界
  17. 使用VisualStudio进行脚本|样式文件压缩
  18. jquery源码&#39;jQuery.fn.init.prototype&#39;
  19. Spring ApplicationContext(六)BeanPostProcessor
  20. 【Leetcode】338. Bit位计数

热门文章

  1. qt creator源码全方面分析(2-4)
  2. opencv —— getTickCount、getTickFrequency 计时函数
  3. webpack安装jQuery报错
  4. vulnhub靶机之DC6实战(wordpress+nmap提权)
  5. 《京东B2B业务架构演变》阅读
  6. 查看whl包名是否满足系统的条件的命令,以此解决whl包出现“is not a supported wheel on this platform”错误提示的问题
  7. Java集合之Collections 剖析
  8. 5G PDCCH 协议
  9. AE开发中添加EngineOrDesktop后仍然有错误
  10. P1282 多米诺骨牌【dp】