题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5510

思路:

一开始直接用KMP莽了发,超时了,后面发现如果前面的字符串被后面的字符串包含,那么我们就不需要用前面的字符串去比较了,把他标记掉就好了。

实现代码:

  1. #include<iostream>
  2. #include<algorithm>
  3. #include<cstring>
  4. #include<cstdio>
  5. using namespace std;
  6. char s[][];
  7. int vis[];
  8. int next1[];
  9. int slen,tlen;
  10. void get_next(char *mat)
  11. {
  12. int j,k;
  13. tlen=strlen(mat);
  14. j=;k=-;next1[]=-;
  15. while(j<tlen)
  16. {
  17. if(k==-||mat[j]==mat[k])
  18. next1[++j]=++k;
  19. else
  20. k=next1[k];
  21. }
  22. }
  23. int kmp_pos(char *str,char *mat)
  24. {
  25. int i=,j=;
  26. slen=strlen(str);
  27. get_next(mat);
  28. while(i<slen&&j<tlen)
  29. {
  30. if(j==-||str[i]==mat[j])
  31. {
  32. i++;j++;
  33. }
  34. else
  35. j=next1[j];
  36. }
  37. if(j==tlen)
  38. return i-tlen;
  39. return -;
  40. }
  41. int main()
  42. {
  43. int tt,n;
  44. int ttt=;
  45. scanf("%d",&tt);
  46. while(tt--)
  47. {
  48. ttt++;
  49. int sum=-;
  50. scanf("%d",&n);
  51. for(int i=;i<=n;i++)
  52. {
  53. scanf("%s",s[i]);
  54. vis[i] = ;
  55. }
  56. int flag=;
  57. int st = ;
  58. for(int i = ;i <= n;i ++){
  59. int ans=kmp_pos(s[i],s[i-]);
  60. if(ans != -)
  61. vis[i-] = ;
  62. }
  63. for(int i=n;i>=;i--)
  64. {
  65. flag=;
  66. for(int j=i-;j>=;j--)
  67. {
  68. if(vis[j]==) continue;
  69. int ans=kmp_pos(s[i],s[j]);
  70. if(ans==-)
  71. {
  72. flag=;break;
  73. }
  74. }
  75. if(flag==)
  76. {
  77. sum=i;break;
  78. }
  79. }
  80. printf("Case #%d: ",ttt);
  81. printf("%d\n",sum);
  82. }
  83. }

hdu 5510 Bazinga (KMP+暴力标记)的更多相关文章

  1. hdu 5510 Bazinga (kmp+dfs剪枝) 2015ACM/ICPC亚洲区沈阳站-重现赛(感谢东北大学)

    废话: 这道题很是花了我一番功夫.首先,我不会kmp算法,还专门学了一下这个算法.其次,即使会用kmp,但是如果暴力枚举的话,还是毫无疑问会爆掉.因此在dfs的基础上加上两次剪枝解决了这道题. 题意: ...

  2. hdu 5510 Bazinga KMP+尺取法

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5510 题意:至多50组数据,每组数据至多500个字符串,每个字符串的长度最长为2000.问最大的下标( ...

  3. hdu 5510 Bazinga(暴力)

    Problem Description Ladies and gentlemen, please sit up straight. Don't tilt your head. I'm serious. ...

  4. HDU 5510 Bazinga KMP

    题意: 给\(n(1 \leq n \leq 500)\)个字符串,求一个最大的\(i\),使得存在一个\(S_{j}\)不是\(S_i\)的子串. 分析: 维护两个指针\(l,r\) 那么有两种情况 ...

  5. hdu 5510 Bazinga(字符串kmp)

    Bazinga Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Sub ...

  6. Bazinga HDU 5510 Bazinga(双指针)

    Bazinga HDU 5510 Bazinga(双指针) 题链 解法:对于串i来说,如果串i是不符合的,那么代表串i之前的字符串都是i的子串,那么我们求一个新的i(定义为ti),如果i是ti 的子串 ...

  7. HDU 5510 Bazinga 暴力匹配加剪枝

    Bazinga Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5510 ...

  8. Bazinga HDU - 5510【技巧暴力+字符串】

    题目:https://vjudge.net/problem/HDU-5510 $2015ACM/ICPC$ 亚洲区沈阳站 题目大意: 输入$t$(表示样例个数) 如何每个样例一个 $n$,表示字符串的 ...

  9. 【HDU 5510 Bazinga】字符串

    2015沈阳区域赛现场赛第2题 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5510 题意:给定一个由字符串组成的序列,一共n个元素,每个元素是一个不 ...

随机推荐

  1. Python-SMTP发送邮件(HTML、图片、附件)

    前言: SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式. 一.Python发送HTML ...

  2. [2017BUAA软工助教]第0次作业小结

    BUAA软工第0次作业小结 零.题目 作业链接: This is a hyperlink 一.评分规则 本次作业满分10分: 按时提交有分 一周内补交得0分 超过一周不交或抄袭倒扣全部分数 评分规则如 ...

  3. Codeforces Round #546 (Div. 2)

    http://codeforces.com/contest/1136 A #include <bits/stdc++.h> using namespace std; ; int N, K; ...

  4. 【学亮IT手记】MySql行列转换案例

    create table score( name ), math int, english int ); ,); ,); ,); ,); SHOW tables; SELECT * from scor ...

  5. vue-axios的application/x-www-form-urlencod的post请求无法解析参数

    vue-axios的post会先将对象转为json然后再根据headers的设置再转一次格式,可以将参数先用qs.stringify()转一次再传输

  6. 保存后自动格式化代码(vscode)

    痛点: 写项目的时候, 我们经常会拷贝一些代码, 每当拷贝过来都需要重新调整, 如果可以实现保存自动调整代码, 将会给我们带来很多的便利! 解决: 其实对于vscode来说, 实现这一点很容易. 我们 ...

  7. Linux在shell中进入python敲方向键出现「^[[C^[[D」的解决办法

    安装yum -y install readline-devel,然后在重新编译python

  8. Java 基础类型 默认值

    (1)数据库里的列,如果有默认值,不能赋值有业务含义的值. (2)int 默认值 java会分配默认值的额.

  9. DAY07、字符编码和文件操作

    一.字符编码 1.什么是字符编码? 人类能识别的是字符等高级标识符,电脑只能识别0,1组成的标识符,要完成人与机器之间的信息交流,              一定需要一个媒介,进行两种标识符的转化(两 ...

  10. Java多线程2:线程的使用及其生命周期

    一.线程的使用方式 1.继承Thread类,重写父类的run()方法 优点:实现简单,只需实例化继承类的实例,即可使用线程 缺点:扩展性不足,Java是单继承的语言,如果一个类已经继承了其他类,就无法 ...