枚举长度最短的字符串的所有子串,再与其他串匹配。
  1. #include<cstdio>
  2. #include<cstring>
  3. #include<algorithm>
  4. #include<iostream>
  5. #include<cstdlib>
  6. #include<string>
  7. #include<cmath>
  8. #include<vector>
  9. using namespace std;
  10. const int maxn=1e5+;
  11. const double eps=1e-;
  12. const double pi=acos(-);
  13. const int inf = 0x3f3f3f3f;
  14. #define ll long long
  15. #define clc(a,b) memset(a,b,sizeof(a))
  16.  
  17. int next[];
  18. char str[][];
  19.  
  20. void getnext(char *t)
  21. {
  22. int i=,j=-;
  23. int len=strlen(t);
  24. next[]=-;
  25. while(i<len)
  26. {
  27. if(t[i]==t[j]||j==-)
  28. {
  29. i++;
  30. j++;
  31. next[i]=j;
  32. }
  33. else
  34. j=next[j];
  35. }
  36. }
  37.  
  38. int kmp(char *s,char *t)
  39. {
  40. int lens=strlen(s);
  41. int lena=strlen(t);
  42. int i=,j=;
  43. while(i<lens&&j<lena)
  44. {
  45. if(s[i]==t[j]||j==-)
  46. {
  47. i++;
  48. j++;
  49. }
  50. else
  51. j=next[j];
  52. }
  53. if(j<lena)
  54. return -;
  55. return i-lena;
  56. }
  57.  
  58. int main()
  59. {
  60. int n,len;
  61. while(cin>>n&&n)
  62. {
  63. char tmp[];
  64. int minn=inf;
  65. for(int i=;i<n;i++)
  66. {
  67. scanf("%s",str[i]);
  68. len=strlen(str[i]);
  69. if(minn>len)
  70. {
  71. minn=len;
  72. strcpy(tmp,str[i]);
  73. }
  74. }
  75. len=strlen(tmp);
  76. char p[];
  77. char f[]={};
  78. int ans=;
  79. for(int i=;i<=len;i++)
  80. {
  81. int cnt;
  82. for(int j=;j+i<=len;j++)
  83. {
  84. cnt=;
  85. strncpy(p,tmp+j,i);
  86. p[i]='\0';
  87. getnext(p);
  88. for(int k=;k<n;k++)
  89. {
  90. if(kmp(str[k],p)!=-)
  91. {
  92. cnt++;
  93. }
  94. else
  95. break;
  96. }
  97. if(cnt==n)
  98. {
  99. ans++;
  100. if(strlen(f)<strlen(p))
  101. strcpy(f,p);
  102. else if(strcmp(f,p)>)
  103. strcpy(f,p);
  104. }
  105. }
  106. }
  107. if(ans==)
  108. printf("IDENTITY LOST\n");
  109. else
  110. printf("%s\n",f);
  111. }
  112. }

POJ 3450 Corporate Identity kmp+最长公共子串的更多相关文章

  1. POJ 3450 Corporate Identity KMP解决问题的方法

    这个问题,需要一组字符串求最长公共子,其实灵活运用KMP高速寻求最长前缀. 请注意,意大利愿父亲:按照输出词典的顺序的规定. 另外要提醒的是:它也被用来KMP为了解决这个问题,但是很多人认为KMP使用 ...

  2. POJ 3450 Corporate Identity(KMP)

    [题目链接] http://poj.org/problem?id=3450 [题目大意] 求k个字符串的最长公共子串,如果有多个答案,则输出字典序最小的. [题解] 我们对第一个串的每一个后缀和其余所 ...

  3. POJ 2774 Long Long Message [ 最长公共子串 后缀数组]

    题目:http://poj.org/problem?id=2774 Long Long Message Time Limit: 4000MS   Memory Limit: 131072K Total ...

  4. POJ 3450 Corporate Identity (KMP,求公共子串,方法很妙)

    http://blog.sina.com.cn/s/blog_74e20d8901010pwp.html我采用的是方法三. 注意:当长度相同时,取字典序最小的. #include <iostre ...

  5. poj 3450 Corporate Identity

    题目链接:http://poj.org/problem?id=3450 题目分类:后缀数组 题意:求n个串的最长公共字串(输出字串) //#include<bits/stdc++.h> # ...

  6. POJ 3080 Blue Jeans 找最长公共子串(暴力模拟+KMP匹配)

    Blue Jeans Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 20966   Accepted: 9279 Descr ...

  7. POJ 3450 Corporate Identity (KMP+暴搞)

    题意: 给定N个字符串,寻找最长的公共字串,如果长度相同,则输出字典序最小的那个. 找其中一个字符串,枚举它的所有的字串,然后,逐个kmp比较.......相当暴力,可二分优化. #include & ...

  8. POJ 3450 后缀数组/KMP

    题目链接:http://poj.org/problem?id=3450 题意:给定n个字符串,求n个字符串的最长公共子串,无解输出IDENTITY LOST,否则最长的公共子串.有多组解时输出字典序最 ...

  9. POJ3450最长公共子串【kmp】

    题目链接:http://poj.org/problem?id=3450 题目大意:给定n个长度不超过200的字符串,n < 4000.求这些字符串的最长公共子串,若没有,则输出 “IDENTIT ...

随机推荐

  1. 树莓派 raspberry 入门之安装操作系统以及配置

    最近新入手一树莓派,型号是2代B,屏幕是微雪的7 inch c型 显示屏.下面来教大家怎么点亮树莓派. 第一步,装好显示器,显示器的电源接在树莓派的usb口上,HDMI口不多说,连上.然后装好鼠标.键 ...

  2. Git权威指南 读笔(2)

    第七章 Git重置: Git提供了一个挽救机制,通过.git/logs目录下日志文件记录了分支的变更. master分支的日志文件.git/logs/refs/heads/master,显示最后5行: ...

  3. 正则表达式中的\n

    搜索文件中的字符,希望每次从每行的开始进行匹配. 所以在表达式开头加了\n 结果发现怎么都匹配不了. string regEx = @"\n\d*\s*!\s*TESTNAME” 最后,偶然 ...

  4. 基于strpos()函数的判断用户浏览器方法

    $_SERVER['HTTP_USER_AGENT'],超全局变量,用来读取客户用的什么浏览器及其版本. strpos(),指定一个字符并搜索是否包含该字符. <html> <hea ...

  5. [JavaScript] 怎么使用JS禁止复制粘贴

    1. 将彻底屏蔽鼠标右键,其实是禁止快捷菜单,因为不光右键可以弹出这个菜单,键盘上空格键右边的windows键也可以激活这个快捷菜单 <table border oncontextmenu=re ...

  6. android对大图片的缓存处理

    废话不多说,直接上代码 package com.huge.emj.common.util; import java.io.File; import java.io.FileInputStream; i ...

  7. 环信_EaseUI 使用指南

    EaseUI 使用指南 简介 EaseUI 封装了 IM 功能常用的控件(如聊天会话.会话列表.联系人列表).旨在帮助开发者快速集成环信 SDK. 源码地址: EaseUI:https://githu ...

  8. 李洪强漫谈iOS开发[C语言-017]-printf函数

  9. Mpeg-2的同步及时间恢复--STC,PCR,DTS,PTS

    http://blog.csdn.net/hice1226/article/details/6717354 Mpeg-2的同步及时间恢复--STC,PCR,DTS,PTS 摘要:Mpeg-2同步及时间 ...

  10. NGUI所见即所得之UIAtlasMaker , UIAtlas (2)

    本文的重点就是要将NGUI把多张图片打成一个图集(Atlas)的原理和过程研究下,学习下Unity提供的api和NGUI写的功能以及设计思想. (原文链接) 其它链接:NGUI所见即所得之UIRoot ...