问两个串的最长公共子串,n<=100000。

SAM可以直接搞当然SA哈希都可以。。类似于KMP的做法,如果沿parent边走要顺势修改匹配位置。

  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<algorithm>
  4. #include<stdlib.h>
  5. //#include<iostream>
  6. //#include<assert.h>
  7. //#include<time.h>
  8. using namespace std;
  9.  
  10. int n;
  11. #define maxn 200011
  12. char s[maxn],p[maxn];
  13.  
  14. struct samnode
  15. {
  16. int ch[],pre;
  17. int pos;
  18. samnode() {memset(ch,,sizeof(ch)); pre=;}
  19. };
  20. struct SAM
  21. {
  22. samnode a[maxn];int last,size;
  23. SAM() {last=;a[].pos=;size=;a[].pre=-;}
  24. int idx(char c) {return c-'a';}
  25. void insert(char c,int p)
  26. {
  27. int id=idx(c);int x=++size;
  28. a[x].pos=p;
  29. int y=last;
  30. for (;y!=- && !a[y].ch[id];y=a[y].pre) a[y].ch[id]=x;
  31. last=x;
  32. if (y==-) a[x].pre=;
  33. else
  34. {
  35. if (a[a[y].ch[id]].pos==a[y].pos+) a[x].pre=a[y].ch[id];
  36. else
  37. {
  38. int z=a[y].ch[id],w=++size;
  39. a[w]=a[z];
  40. a[w].pos=a[y].pos+;
  41. a[z].pre=a[x].pre=w;
  42. for (;y!=- && a[y].ch[id]==z;y=a[y].pre) a[y].ch[id]=w;
  43. }
  44. }
  45. }
  46. }sam;
  47. int main()
  48. {
  49. scanf("%s",s+);n=strlen(s+);
  50. scanf("%s",p);int lp=strlen(p);
  51. for (int i=;i<lp;i++) sam.insert(p[i],i+);
  52. int now=;int ans=;
  53. for (int i=,cnt=;i<=n;i++)
  54. {
  55. while (now && !sam.a[now].ch[s[i]-'a']) now=sam.a[now].pre,cnt=sam.a[now].pos;
  56. if (sam.a[now].ch[s[i]-'a']) cnt++,now=sam.a[now].ch[s[i]-'a'];
  57. else cnt=,now=;
  58. ans=max(ans,cnt);
  59. }
  60. printf("%d\n",ans);
  61. return ;
  62. }

POJ2774:Long Long Message的更多相关文章

  1. HiHocoder1415 : 后缀数组三·重复旋律3 & Poj2774:Long Long Message

    题面 HiHocoder1415 Poj2774 Sol 都是求最长公共子串,\(hihocoder\)上讲的很清楚 把两个串拼在一起,中间用一个特殊字符隔开 那么答案就是排序后相邻两个不同串的后缀的 ...

  2. POJ2774:Long Long Message——题解

    http://poj.org/problem?id=2774 给定两个字符串 A 和 B,求最长公共子串. 论文题,把两个串合并起来,比较两个串各自的后缀的height值取最大即可. #include ...

  3. 【POJ2774】Long Long Message(后缀数组)

    [POJ2774]Long Long Message(后缀数组) 题面 Vjudge Description Little cat在Byterland的首都读物理专业.这些天他收到了一条悲伤地信息:他 ...

  4. Android消息机制:Looper,MessageQueue,Message与handler

    Android消息机制好多人都讲过,但是自己去翻源码的时候才能明白. 今天试着讲一下,因为目标是讲清楚整体逻辑,所以不追究细节. Message是消息机制的核心,所以从Message讲起. 1.Mes ...

  5. WCF技术剖析之十七:消息(Message)详解(下篇)

    原文:WCF技术剖析之十七:消息(Message)详解(下篇) [爱心链接:拯救一个25岁身患急性白血病的女孩[内有苏州电视台经济频道<天天山海经>为此录制的节目视频(苏州话)]]< ...

  6. WCF技术剖析之十七:消息(Message)详解(中篇)

    原文:WCF技术剖析之十七:消息(Message)详解(中篇) [爱心链接:拯救一个25岁身患急性白血病的女孩[内有苏州电视台经济频道<天天山海经>为此录制的节目视频(苏州话)]]在上篇中 ...

  7. WCF技术剖析之十七:消息(Message)详解(上篇)

    原文:WCF技术剖析之十七:消息(Message)详解(上篇) [爱心链接:拯救一个25岁身患急性白血病的女孩[内有苏州电视台经济频道<天天山海经>为此录制的节目视频(苏州话)]]消息交换 ...

  8. Android 异步消息处理机制前篇(二):深入理解Message消息池

    版权声明:本文出自汪磊的博客,转载请务必注明出处. 上一篇中共同探讨了ThreadLocal,这篇我们一起看下常提到的Message消息池到底是怎么回事,废话少说吧,进入正题. 对于稍有经验的开发人员 ...

  9. ORACLE等待事件:SQL*Net message from client & SQL*Net message to client

    在ORACLE当中有两个很常见的等待事件"SQL*Net message from client"与"SQL*Net message to client",两者 ...

随机推荐

  1. [Swift通天遁地]一、超级工具-(13)使用PKHUD制作各种动态提示窗口

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...

  2. CSS3常用知识点

    CSS3常用知识点 1 css3选择器 1.1 属性选择器 /* E[attr~=val] 表示的一个单独的属性值 这个属性值是以空格分隔的*/ .attr2 a[class~="kawa& ...

  3. Windows 和 Linux 上Redis的安装守护进程配置

    # Windows 和 Linux 上Redis的安装守护进程配置 Redis 简介 ​ Redis是目前最常用的非关系型数据库(NOSql)之一,常以Key-Value的形式存储.Redis读写速度 ...

  4. [ NOI 2001 ] 食物链

    \(\\\) Description 有三类动物 \(A,B,C\),满足\(A\) 吃 \(B\),\(B\)吃 \(C\),\(C\) 吃 \(A\). 现有 \(N\) 个动物,以 \(1 - ...

  5. Android OKHttp网络框架

    好久没逛简书了.这周公司的项目也已经愉快的迭代了新版本,对于之前一直存留的东西一直没怎么梳理,今天想说说这两年特别火的网络框架.okhttp我想大部分Android开发者都不陌生,因为它的到来.是我们 ...

  6. Android PopupWindow使用时注意

    项目中使用PopupWindown出现的坑 1.部分设备,PopWindow在Android4.0后版本,出现NullPointerException调用以下方法可解决, fixPopupWindow ...

  7. 对比hive和mysql查询汇总

    由于底层的处理机制大不相同,hive和mysql在查询上还是有较大差异的! 单个表的select操作 最简单的查询 ,字段2 frome 表名 where 字段 [not]in(元素1,元素2): 例 ...

  8. 【译】x86程序员手册31- 第9章 异常和中断

    Chapter 9 Exceptions and Interrupts 第9章 异常和中断 Interrupts and exceptions are special kinds of control ...

  9. Fiddler 修改响应内容

    1. 导入 FiddlerCore.dll 第三方库. 2. 开启侦听端口,FiddlerApplication.Startup(8888, FiddlerCoreStartupFlags.Defau ...

  10. (转)版本管理工具介绍——SVN篇(一)

    http://blog.csdn.net/yerenyuan_pku/article/details/72620101 SVN是何物 SVN是Subversion的简称,是一款集中式的开源版本控制系统 ...