BZOJ 2251 [2010Beijing Wc]外星联络

原创 2016年08月28日 21:13:43

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


【题目分析】
按理说这种东西用后缀数组才是正解,但是强行使用trie树来构造再dfs一遍貌似也是可以的。


【代码】

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
char s[3001];
int trie[9000001][2];
int end[9000001],tot;
inline void ins(char *s)
{
    int l=strlen(s);int now=0;
    for (int i=0;i<l;++i)
    {
        int tmp=s[i]-'0';
        if (!trie[now][tmp]) trie[now][tmp]=++tot;
        now=trie[now][tmp];
        end[now]++;
    }
}
inline void dfs(int k)
{
    if (end[k]>1&&k) cout<<end[k]<<endl;
    if (trie[k][0]) dfs(trie[k][0]);
    if (trie[k][1]) dfs(trie[k][1]);
}
int main()
{
    int n; cin>>n;
    scanf("%s",s+1);
    for (int i=1;i<=n;++i) ins(s+i);
    dfs(0);
}
版权声明:标注来源之后可随意引用[请记得添加友链]

BZOJ2251: [2010Beijing Wc]外星联络 后缀数组

2251: [2010Beijing Wc]外星联络 Time Limit: 30 Sec  Memory Limit: 256 MB Submit: 791  Solved: 475 [Subm...
  • Oakley_
  • Oakley_
  • 2017年01月12日 20:20
  • 378

BZOJ 2251 2010Beijing WC 外星联络 后缀数组/Trie树

题目大意给出一个字符串,问这个字符串中出现过1次以上的子串的个数,按照子串的字典序输出。思路由于数据范围过小,这个题有两个解法。 基本的想法就是用后缀数组来进行后缀的排序,之后按照height数组扫...
  • jiangyuze831
  • jiangyuze831
  • 2015年04月07日 09:42
  • 1268

[BZOJ2251][2010Beijing Wc]外星联络(后缀数组)

题目描述传送门题解首先求出来sa和height 然后其实就是暴力计算一下每一个后缀向后延伸多远。 注意要去掉重复的,也就是说要从每一个最长的那个后缀开始,并且对于每一个后缀,要从大到小合并。 时...
  • Clove_unique
  • Clove_unique
  • 2016年12月28日 09:55
  • 371

[SA] BZOJ 2251 [2010Beijing Wc]外星联络

见后缀数组后暴力就好了 考前练版子,竟然WA了几发 #include #include #include #include using namespace std; inline char nc...
  • u014609452
  • u014609452
  • 2016年04月27日 19:45
  • 266

BZOJ 2251 [2010Beijing Wc]外星联络

后缀数组建出后缀数组,按照排名遍历每一个后缀,对于每一个后缀sa[i],从sa[i]+height[i]枚举每一个子串,即可按字典序枚举所有子串(证明见下)。暴力跳height即可出答案。可以证明每一...
  • ziqian2000
  • ziqian2000
  • 2017年01月07日 22:42
  • 124

bzoj2251 外星联络

trie树的dfs
  • sdfzyhx
  • sdfzyhx
  • 2016年06月19日 23:07
  • 546

[BZOJ2251][2010Beijing Wc]外星联络(后缀数组+贪心)

题目: 我是超链接 题解: 针对子串字典序从小到大,我们可以用后缀数组的序列+从小到大循环解决,运用height数组乱搞,其实就是暴力计算一下每一个后缀向后延伸多远。 看height数组递...
  • Blue_CuSO4
  • Blue_CuSO4
  • 2018年01月05日 14:28
  • 82

BZOJ2251 外星联络 (Trie树)

题目大意给出一个01串,要求按照字典序输出在串中出现两次以上的子串的出现次数。题解我是在hzwer学长的后缀数组专题中看到这道题的,但是我并没有很理解黄学长的暴力是怎么思考的…于是我在另一个地方得到了...
  • qq_33330876
  • qq_33330876
  • 2017年04月17日 19:00
  • 449

bzoj2251 [2010Beijing WC]外星联络(后缀数组+暴力)

求所有出现次数大于1的字串。。用后缀数组处理出h数组,每个子串第一次出现时,往后扫,看重复了几次。n=3000,暴力即可。...
  • Icefox_zhx
  • Icefox_zhx
  • 2017年08月03日 12:58
  • 120

bzoj 2251(后缀数组)

2251: [2010Beijing Wc]外星联络 Time Limit: 30 Sec  Memory Limit: 256 MB Submit: 660  Solved: 388 [Sub...
  • M_AXSSI
  • M_AXSSI
  • 2016年04月15日 19:32
  • 268
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:BZOJ 2251 [2010Beijing Wc]外星联络
举报原因:
原因补充:

(最多只允许输入30个字)