题意:给你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. 安装好MySQL后就开始学习如何后台创建自己的数据库吧!

    MySQL创建数据库的方式不像SQL Server那样有图形界面,而是使用DOS窗口创建的,接下来就是创建MySQL数据库的具体步骤. ↓↓↓↓↓↓↓↓      ↓↓↓↓↓↓↓↓      ↓↓↓↓ ...

  2. win10系统修改Intel VT-x时进入不了BIOS问题

    一般电脑进入BIOS的方式都是在开机的时候不停的按F2或者F12,但是Win10系统由于支持快速启动,当win10系统快速启动的时候,按F12或者F2是没反应的,解决方式: 第一步:修改win10的启 ...

  3. Python与硬件学习笔记:蜂鸣器(转)

    相信大家对蜂鸣器都不会陌生,很多产品和方案中都会用到蜂鸣器,大部分都是使用蜂鸣器来做提示或报警,比如按键按下.开始工作.工作结束或是故障等等.这里对单片机在蜂鸣器驱动上的应用作一下描述. 蜂鸣器的介绍 ...

  4. imx6q Xorg下Qt应用开机自启动及添加桌面快捷启动图标的方法

    启动scene3d例子: root@imx6qsabresd:/etc/X11/Xsession.d# ls -altotal 36drwxr-xr-x 2 root root 4096 Mar 12 ...

  5. 主攻ASP.NET MVC4.0之重生:使用反射获取Controller的ActionResult

    示例代码 public ActionResult TypeOfForName() { Type typeinfo = typeof(CustomerClassController); //typeof ...

  6. awk的getline命令

    原文出处:生活费的博客,http://www.cnblogs.com/276815076/archive/2011/12/05/2276625.html#undefined  两种情况:getline ...

  7. php面向对象之克隆对象

    在前面的PHP面向对象之对象和引用,我们试图以"$b=$a"的方式复制对象以传递对象的值(内容),结果却是传递对象的地址,在结尾为了解决复制对象这个问题,提到了克隆的方法.接下来讲 ...

  8. JSP语法及内置对象

    JSP全名为Java Server Pages,中文名叫java服务器页面,其根本是一个简化的Servlet设计,它[1]  是由Sun Microsystems公司倡导.许多公司参与一起建立的一种动 ...

  9. 【codevs2333】&【BZOJ2002】弹飞绵羊[HNOI2010](分块)

    我其实是在codevs上看到它的题号后才去做这道题的...2333... 题目传送门:codevs:http://codevs.cn/problem/2333/ bzoj:http://www.lyd ...

  10. 使用iView时报"Parsing error: x-invalid-end-tag"错误的解决方案

    一. 问题日志 二. 问题原因iView将标签渲染为原生html标签时,由于这些标签是自闭合的,所以有end标签会报错. 三. 解决方案修改配置文件,忽略该项检查: 根目录下 - .eslintrc. ...