题意:给你n个字符串,求出在超过一半的字符串中出现的所有子串中最长的子串,按字典序输出。

对这n个字符串建广义后缀自动机,建完后每个字符串在自动机上跑一遍,沿fail树向上更新所有子串结点的出现次数(指在n个字符串中的多少个串中出现,用siz表示),用vis数组判重,最后dfs输出结果就好了。

 #include<bits/stdc++.h>

 using namespace std;
 +;
 int n,m,ka;
 ][N],ss[N];
 int idx(char ch) {return ch-'a';}

 struct SAM {
     ,M=;
     int go[N][M],pre[N],len[N],tot,last,siz[N],vis[N],mx;
     ; newnode(); pre[]=-;}
     int newnode(int l) {
         int u=tot++;
         memset(go[u],,sizeof go[u]);
         len[u]=l,siz[u]=;
         return u;
     }
     void extend(int ch) {
         );
         for(; ~p&&!go[p][ch]; p=pre[p])go[p][ch]=np;
         ;
         else {
             int q=go[p][ch];
             )pre[np]=q;
             else {
                 );
                 memcpy(go[nq],go[q],sizeof go[nq]);
                 pre[nq]=pre[q],pre[q]=pre[np]=nq;
                 for(; ~p&&go[p][ch]==q; p=pre[p])go[p][ch]=nq;
             }
         }
     }
     void dfs(int u,int dep) {
         if(vis[u])return;
         vis[u]=;
         &&len[u]==mx)ss[dep]='\0',puts(ss);
         ; i<M; ++i));
     }
     void run() {
         memset(vis,-,sizeof vis);
         ; t<m; ++t)
             ,u=; s[t][i]; u=go[u][idx(s[t][i])],++i)
                 for(int v=go[u][idx(s[t][i])]; v&&vis[v]!=t; v=pre[v])vis[v]=t,siz[v]++;
         mx=-;
         ; i<tot; ++i))mx=max(mx,len[i]);
         memset(vis,,sizeof vis);
         )puts("?");
         ,);
     }
 } sam;

 int main() {
     while(scanf("%d",&m)&&m) {
         ka?puts(""):ka++;
         sam.init();
         ; t<m; ++t) {
             sam.last=;
             scanf("%s",s[t]);
             n=strlen(s[t]);
             ; i<n; ++i)sam.extend(idx(s[t][i]));
         }
         sam.run();
     }
     ;
 }

UVA - 11107 Life Forms (广义后缀自动机)的更多相关文章

  1. UVA - 11107 Life Forms (广义后缀自动机+后缀树/后缀数组+尺取)

    题意:给你n个字符串,求出在超过一半的字符串中出现的所有子串中最长的子串,按字典序输出. 这道题算是我的一个黑历史了吧,以前我的做法是对这n个字符串建广义后缀自动机,然后在自动机上dfs,交上去AC了 ...

  2. POJ3294Life Forms(广义后缀自动机)(后缀数组+二分+数状数组)

    You may have wondered why most extraterrestrial life forms resemble humans, differing by superficial ...

  3. bzoj3926: [Zjoi2015]诸神眷顾的幻想乡 对[广义后缀自动机]的一些理解

    先说一下对后缀自动机的理解,主要是对构造过程的理解. 构造中,我们已经得到了前L个字符的后缀自动机,现在我们要得到L+1个字符的后缀自动机,什么需要改变呢? 首先,子串$[0,L+1)$对应的状态不存 ...

  4. BZOJ 3926 && ZJOI 2015 诸神眷顾的幻想乡 (广义后缀自动机)

    3926: [Zjoi2015]诸神眷顾的幻想乡 Time Limit: 10 Sec Memory Limit: 512 MB Description 幽香是全幻想乡里最受人欢迎的萌妹子,这天,是幽 ...

  5. BZOJ 3277 串 (广义后缀自动机)

    3277: 串 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 309 Solved: 118 [Submit][Status][Discuss] De ...

  6. BZOJ 3473: 字符串 [广义后缀自动机]

    3473: 字符串 Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 354  Solved: 160[Submit][Status][Discuss] ...

  7. BZOJ.2780.[SPOJ8093]Sevenk Love Oimaster(广义后缀自动机)

    题目链接 \(Description\) 给定n个模式串,多次询问一个串在多少个模式串中出现过.(字符集为26个小写字母) \(Solution\) 对每个询问串进行匹配最终会达到一个节点,我们需要得 ...

  8. BZOJ.3926.[ZJOI2015]诸神眷顾的幻想乡(广义后缀自动机)

    题目链接 要对多个串同时建立SAM,有两种方法: 1.将所有串拼起来,中间用分隔符隔开,插入字符正常插入即可. 2.在这些串的Trie上建SAM.实际上并不需要建Trie,还是只需要正常插入(因为本来 ...

  9. 【CF666E】Forensic Examination 广义后缀自动机+倍增+线段树合并

    [CF666E]Forensic Examination 题意:给你一个字符串s和一个字符串集合$\{t_i\}$.有q个询问,每次给出$l,r,p_l,p_r$,问$s[p_l,p_r]$在$t_l ...

随机推荐

  1. .ssh中的文件的分别意义

    当我们在用户的主目录使用如下命令: cd (进入个人主目录,默认为/home/hadoop) ssh-keygen -t rsa -P '' (注:最后是二个单引号) 表示在用户的主目录创建ssh登陆 ...

  2. linux命令详解之df(6/19)

    df命令作用是列出文件系统的整体磁盘空间使用情况.可以用来查看磁盘已被使用多少空间和还剩余多少空间. df命令显示系统中包含每个文件名参数的磁盘使用情况,如果没有文件名参数,则显示所有当前已挂载文件系 ...

  3. Java中ArrayList和LinkedList区别、ArrayList和Vector的区别

    一般大家都知道ArrayList和LinkedList的大致区别: 1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构. 2.对于随机访问get和set,Ar ...

  4. ETL应用:一种处理接口的Pro*C实现方法

    2007年,当时项目所有ETL采用C编写,实现了ETL基本功能.当接口很多时,为保证文件获取效率,做好接口可配置:文件维护中经常会出现接口晚到情况,需要有一种方法能将接口晚到信息写入数据库,便于短信告 ...

  5. Django---Blog系统开发之注册页面(验证码&ajax发送文件)

    前端页面及渲染: 静态文件的配置:setting.py: static 文件放在app下 STATIC_URL = '/static/' STATIC_ROOT = ( os.path.join(BA ...

  6. Shell编程之循环控制及状态返回值

    1.break.continue.exit.return的对比 break.continue在条件语句和循环语句中用于控制程序走向: exit用于终止所有语句并退出当前脚本,还可以返回上一次程序或命令 ...

  7. R和Python小数的保留

    R: 1.保留几位有效数字: signif(x,digits) 2.保留几位小数: round(x,digits) Python: 1.“%.2f”%a

  8. 父元素设置overflow,绝对定位的子元素会被隐藏或一起滚动

    一般情况: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <met ...

  9. linux下安装LAMP环境,也就是PHP+linux的开发运行环境(centos7)

    注:整理至http://blog.51cto.com/afterdawn/1923139 LAMP(linux.apache.mysql.php),是四个套件的合成,简单讲就是要把php运行在linu ...

  10. git上面创建个人简历-链接

    github创建个人在线简历: https://segmentfault.com/a/1190000006820290