【BZOJ2251】[2010Beijing Wc]外星联络

Description

小 P 在看过电影《超时空接触》(Contact)之后被深深的打动,决心致力于寻
找外星人的事业。于是,他每天晚上都爬在屋顶上试图用自己的收音机收听外星
人发来的信息。虽然他收听到的仅仅是一些噪声,但是他还是按照这些噪声的高
低电平将接收到的信号改写为由 0 和 1 构成的串, 并坚信外星人的信息就隐藏在
其中。他认为,外星人发来的信息一定会在他接受到的 01 串中重复出现,所以
他希望找到他接受到的 01 串中所有重复出现次数大于 1 的子串。但是他收到的
信号串实在是太长了,于是,他希望你能编一个程序来帮助他。

Input

输入文件的第一行是一个整数N ,代表小 P 接收到的信号串的长度。 
输入文件第二行包含一个长度为N 的 01 串,代表小 P 接收到的信号串。

Output

输出文件的每一行包含一个出现次数大于1 的子串所出现的次数。输出的顺
序按对应的子串的字典序排列。

Sample Input

7
1010101

Sample Output

3
3
2
2
4
3
3
2
2

HINT

对于 100%的数据,满足 0 <= N <=3000

题解:先求出sa和height,然后只要沿着sa枚举每一个子串,在height里找出height不小于当前子串长度的范围。为了防止重复,每次枚举从height+1开始。

#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
const int maxn=3010;
int ra[maxn],rb[maxn],st[maxn],sa[maxn],v[maxn],rank[maxn],h[maxn];
char str[maxn];
int n,m;
void work()
{int i,j,k,p,*x=ra,*y=rb;for(i=0;i<n;i++)    st[x[i]=v[i]]++;for(i=1;i<m;i++)    st[i]+=st[i-1];for(i=n-1;i>=0;i--)    sa[--st[x[i]]]=i;for(j=1,p=1;p<n;j<<=1,m=p){for(p=0,i=n-j;i<n;i++)    y[p++]=i;for(i=0;i<n;i++)    if(sa[i]>=j)    y[p++]=sa[i]-j;for(i=0;i<m;i++)    st[i]=0;for(i=0;i<n;i++)    st[x[y[i]]]++;for(i=1;i<m;i++)    st[i]+=st[i-1];for(i=n-1;i>=0;i--)    sa[--st[x[y[i]]]]=y[i];for(swap(x,y),p=1,x[sa[0]]=0,i=1;i<n;i++)x[sa[i]]=(y[sa[i-1]]==y[sa[i]]&&y[sa[i-1]+j]==y[sa[i]+j])?p-1:p++;}for(i=0;i<n;i++)    rank[sa[i]]=i;for(i=k=0;i<n-1;h[rank[i++]]=k)for(k?k--:0,j=sa[rank[i]-1];v[i+k]==v[j+k];k++);
}
int main()
{scanf("%d%s",&n,str);int i,j,r;for(i=0;i<n;i++)    v[i]=str[i]-'0'+1;m=3;n++;work();for(i=1;i<n;i++){for(j=h[i]+1;sa[i]+j<n;j++){//网上的题解这里还向下求了一下区间的左端点l,感觉不明觉厉 for(r=i+1;r<=n&&h[r]>=j;r++);if(r-i>=2)    printf("%d\n",r-i);    }}return 0;
}

转载于:https://www.cnblogs.com/CQzhangyu/p/6268708.html

【BZOJ2251】[2010Beijing Wc]外星联络 后缀数组相关推荐

  1. BZOJ2251: [2010Beijing Wc]外星联络

    2251: [2010Beijing Wc]外星联络 Time Limit: 30 Sec  Memory Limit: 256 MB Submit: 989  Solved: 601 [Submit ...

  2. Bzoj2251 [2010Beijing Wc]外星联络

    Time Limit: 30 Sec  Memory Limit: 256 MB Submit: 867  Solved: 522 Description 小 P 在看过电影<超时空接触> ...

  3. bzoj 2251: [2010Beijing Wc]外星联络

    黄学长说是模板题,,然而不会.. 大概是按后缀数组的顺序(也就是字典序)来枚举一下,然后再按长度枚举一下,各种各样的暴力,,,然用在height上搞2333,不会啊 1 #include<bit ...

  4. bzoj2251 外星联络

    Description 小 P 在看过电影<超时空接触>(Contact)之后被深深的打动,决心致力于寻 找外星人的事业.于是,他每天晚上都爬在屋顶上试图用自己的收音机收听外星 人发来的信 ...

  5. HYSBZ 2251 外星联络

    小 P 在看过电影<超时空接触>(Contact)之后被深深的打动,决心致力于寻 找外星人的事业.于是,他每天晚上都爬在屋顶上试图用自己的收音机收听外星 人发来的信息.虽然他收听到的仅仅是 ...

  6. [BZOJ2251/BJWC2010]外星联络

    Description 小 P 在看过电影<超时空接触>(Contact)之后被深深的打动,决心致力于寻找外星人的事业.于是,他每天晚上都爬在屋顶上试图用自己的收音机收听外星人发来的信息. ...

  7. 【2012百度之星/资格赛】H:用户请求中的品牌 [后缀数组]

    时间限制: 1000ms 内存限制: 65536kB 描述 馅饼同学是一个在百度工作,做用户请求(query)分析的同学,他在用户请求中经常会遇到一些很奇葩的词汇.在比方说"johnsonj ...

  8. 剑指 Offer II 114. 外星文字典(困难 图 bfs 哈希表 拓扑排序 字符串 数组)

    剑指 Offer II 114. 外星文字典 现有一种使用英语字母的外星文语言,这门语言的字母顺序与英语顺序不同. 给定一个字符串列表 words ,作为这门语言的词典,words 中的字符串已经 按 ...

  9. 后缀数组总结(转载)

    后缀数组--处理字符串的有力工具 作者:罗穗骞 2009年1月 [摘要] 后缀数组是处理字符串的有力工具.后缀数组是后缀树的一个非常精巧的替代品,它比后缀树容易编程实现,能够实现后缀树的很多功能而时间 ...

最新文章

  1. R-CNN , Fast R-CNN , Faster R-CNN原理及区别
  2. python:实例化configparser模块读写配置文件
  3. cs6序列号 mac版photoshop_重磅!Parallels Desktop 16 M1版发布
  4. oracle中sp怎么写_校招简历中的实习和项目经历该怎么写?
  5. 用python写helloworld_Python Helloworld程序简单实现
  6. php表格js特效,JavaScript表格隔行变色和Tab标签页特效示例【附jQuery版】
  7. 开发环境与工具部署服务_开发与部署之间的区别
  8. Silverlight 解谜游戏 之十七 胜利界面优化
  9. ASP.NET编译和部署模型
  10. C++11基于范围的for循环
  11. 基于NextCloud,挂载Aria2+AriaNG实现不限流量、离线BT下载及在线播放
  12. c语言入门自学 零基础学c语言教程
  13. Windows server 2019的系统激活码 激活windows server 2012r2系统
  14. 卡巴斯基:2019年金融行业网络威胁趋势报告
  15. 南天PR2打印机自动退纸解决办法
  16. 第二工业大学计算机应用大专录取分,二工大|2019年上海第二工业大学专科层次依法自主招生各专业最低录取分数线...
  17. React 之 Expected an assignment or function call and instead saw an expression 解决办法
  18. 免费的可视化Web报表工具,JimuReport v1.4.4-beta版本发布
  19. Proxifier与burp小程序抓包
  20. CCF-201409-5-拼图

热门文章

  1. Oracle 11g Release 1 (11.1) Oracle 本文索引的四种类型
  2. [恢]hdu 2317
  3. SilverLight明日起通过微软更新推送
  4. 文档理解最新技术介绍 | DAS 2020 Keynote Speech
  5. 国科大提出FreeAnchor,新一代通用目标检测方法,代码已开源
  6. Keras与PyTorch全方位比较 哪一个深度学习框架更适合初学者?
  7. 中科院自动化所与华为联合提出!视觉目标检测大模型GAIA
  8. 计算机视觉论文-2021-06-25
  9. 【资源下载】921页《用Python3带你从小白入门机器学习实战》教程手册
  10. 《Python编程从入门到实践》记录之列表遍历