基于hash的LCP算法;

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<algorithm>
  4. #define maxn 40010
  5. using namespace std;
  6.  
  7. const int x=;
  8. int n,m,pos;
  9. unsigned long long h[maxn],xp[maxn],hash[maxn];
  10. int rank[maxn];
  11.  
  12. bool cmp(const int &a,const int &b)
  13. {
  14. return hash[a]<hash[b]||hash[a]==hash[b]&&a<b;
  15. }
  16.  
  17. int possible(int l)
  18. {
  19. int c=;
  20. pos=-;
  21. for(int i=;i<n-l+;i++)
  22. {
  23. rank[i]=i;
  24. hash[i]=h[i]-h[i+l]*xp[l];
  25. }
  26. sort(rank,rank+n-l+,cmp);
  27. for(int i=;i<n-l+;i++)
  28. {
  29. if(i==||hash[rank[i]]!=hash[rank[i-]])c=;
  30. if(++c>=m)pos=max(pos,rank[i]);
  31. }
  32. return pos>=;
  33. }
  34.  
  35. int main()
  36. {
  37. char s[maxn];
  38. while(scanf("%d",&m)&&m)
  39. {
  40. scanf("%s",s);
  41. n=strlen(s);
  42. h[n]=;
  43. for(int i=n-;i>=;i--)
  44. h[i]=h[i+]*x+(s[i]-'a');
  45. xp[]=;
  46. for(int i=;i<=n;i++)xp[i]=xp[i-]*x;
  47. if(!possible())puts("none");
  48. else
  49. {
  50. int l=,r=n+;
  51. while(l+<r)
  52. {
  53. int mid=(r+l)>>;
  54. if(possible(mid))l=mid;
  55. else r=mid;
  56. }
  57. possible(l);
  58. printf("%d %d\n",l,pos);
  59. }
  60. }
  61. return ;
  62. }

uva 12206 - Stammering Aliens的更多相关文章

  1. UVA 12206 - Stammering Aliens(后缀数组)

    UVA 12206 - Stammering Aliens 题目链接 题意:给定一个序列,求出出现次数大于m,长度最长的子串的最大下标 思路:后缀数组.搞出height数组后,利用二分去查找就可以 这 ...

  2. Stammering Aliens

    Stammering Aliens Time Limit: 2000MS   Memory Limit: 65536K       Description Dr. Ellie Arroway has ...

  3. UVa 12206 (字符串哈希) Stammering Aliens

    体验了一把字符串Hash的做法,感觉Hash这种人品算法好神奇. 也许这道题的正解是后缀数组,但Hash做法的优势就是编码复杂度大大降低. #include <cstdio> #inclu ...

  4. Uva12206 Stammering Aliens 后缀数组&&Hash

    Dr. Ellie Arroway has established contact with an extraterrestrial civilization. However, all effort ...

  5. HDU4080 Stammering Aliens(二分 + 后缀数组)

    题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=4080 Description Dr. Ellie Arroway has establish ...

  6. 【UVA 10307 Killing Aliens in Borg Maze】最小生成树, kruscal, bfs

    题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=20846 POJ 3026是同样的题,但是内存要求比较严格,并是没有 ...

  7. UVALive - 4513 Stammering Aliens ——(hash+二分 || 后缀数组加二分)

    题意:找一个出现了m次的最长子串,以及这时的最右的位置. hash的话代码还是比较好写的,,但是时间比SA多很多.. #include <stdio.h> #include <alg ...

  8. Hash(LCP) || 后缀数组 LA 4513 Stammering Aliens

    题目传送门 题意:训练指南P225 分析:二分寻找长度,用hash值来比较长度为L的字串是否相等. #include <bits/stdc++.h> using namespace std ...

  9. 【HDOJ】4080 Stammering Aliens

    1. 题目描述给定一个长为$n \in [1, 4000]$的字符串,求其中长度最长的子串,并且该子串在原串中出现至少$m$次,并求最右起始位置. 2. 基本思路两种方法:二分+后缀数组,或者二分+哈 ...

随机推荐

  1. Android(java)学习笔记144:Android音视频录制类MediaRecorder用法举例

    Android语音录制可以通过MediaRecorder和AudioRecorder.MediaRecorder本来是多媒体录制控件,可以同时录制视频和语音,当不指定视频源时就只录制语音(默认录制语言 ...

  2. java中substring和indexof() 和lastindexof()

    java中substring和indexof() 和lastindexof() str=str.substring(int beginIndex);截取掉str从首字母起长度为beginIndex的字 ...

  3. sublime中使用markdown

    #为知笔记##为知笔记###为知笔记 1. 列表12. 列表23. 列表35. 顺序错了不用担心3. 写错的列表,会自动纠正 为知笔记---------------------- ```cpp int ...

  4. C# MD5 16进制MD5对称加密法

    /// <summary> /// MD5 16进制算法 /// </summary> /// <param name="str"></p ...

  5. IrisSkin4控件使用方法

    参考如下: 1. 将IrisSkin4.dll动态文件导入当前项目引用中.具体操作为:解决方案资源管理器->当前项目->引用->右键->添加引用,找到IrisSkin4.dll ...

  6. JavaScript高级程序设计(五): js的关键字instanceof和typeof使用

    JavaScript中instanceof和typeof 常用来判断一个变量是否为空,或者是什么类型的.但它们之间还是有区别的: 一.typeof 1.含义:typeof返回一个表达式的数据类型的字符 ...

  7. select random item with weight 根据权重随机选出

    http://eli.thegreenplace.net/2010/01/22/weighted-random-generation-in-python/ 类似俄罗斯轮盘赌

  8. iOS imagePicker使用方法,方便使用!三步轻松搞定!

    自己总结的修改头像的方法,只为方便自己查询使用!转发 步骤:1.遵守代理协议 <UIImagePickerControllerDelegate,UINavigationControllerDel ...

  9. javascript 去除字符串中重复字符

    /** * 去除字符串中重复的字符,以下提供2种方法, * removeRepeat()为自己所想: * removeRepeat2()参考网上思路补充的 * removeRepeat3()敬请期待· ...

  10. linux 文件类型

    文件类型 1)windows中是以文件的扩展名来区分文件类型的 2)LINUX中文件扩展名和文件类型没有关系. 3)为了容易区分和兼容用户使用windows的习惯,我们也经常扩展名,但是在LINUX系 ...