http://acm.split.hdu.edu.cn/showproblem.php?pid=5782

题意:
给出两个长度相等的字符串,输出两个字符的每个前缀是否循环相同。

思路:

如果连个串循环相同的话,那一定可以找到一个位置,使得第一个串的前缀等于另一个串的后缀。这样的话其实就是扩展kmp的思想,kmp处理,然后用哈希来比较两段字符是否相等。

  1. #include<iostream>
  2. #include<algorithm>
  3. #include<cstring>
  4. #include<cstdio>
  5. #include<vector>
  6. #include<stack>
  7. #include<queue>
  8. #include<cmath>
  9. #include<map>
  10. #include<set>
  11. using namespace std;
  12. typedef long long ll;
  13. typedef pair<int,int> pll;
  14. const int INF = 0x3f3f3f3f;
  15. const int maxn = + ;
  16.  
  17. const int seed =;
  18.  
  19. int n;
  20. int ans[maxn];
  21. int f[maxn];
  22. ll base[maxn];
  23. ll Hash[][maxn];
  24. char s1[maxn],s2[maxn];
  25.  
  26. int check(int flag, int l, int r)
  27. {
  28. if(l-==r) return ;
  29. int L=r-l+;
  30. ll tmp1 = Hash[flag][l]-Hash[flag][l+L]*base[L];
  31. ll tmp2 = Hash[!flag][]-Hash[!flag][+L]*base[L];
  32. return tmp1==tmp2;
  33. }
  34.  
  35. void kmp(char* T, char* P, int flag)
  36. {
  37. f[]=; f[]=;
  38. for(int i=;i<n;i++)
  39. {
  40. int j=f[i];
  41. while(j && P[i]!=P[j]) j=f[j];
  42. f[i+]= P[i]==P[j]?j+:;
  43. }
  44.  
  45. int j=;
  46. for(int i=;i<n;i++)
  47. {
  48. while(j && P[j]!=T[i]) j=f[j];
  49. if(P[j]==T[i])
  50. {
  51. j++;
  52. if(!ans[i]) ans[i]=check(flag,j,i);
  53. }
  54. }
  55. }
  56.  
  57. int main()
  58. {
  59. //freopen("in.txt","r",stdin);
  60. base[]=;
  61. for(int i=;i<=maxn;i++) base[i]=base[i-]*seed;
  62.  
  63. while(~scanf("%s%s",s1,s2))
  64. {
  65. memset(ans,,sizeof(ans));
  66. n=strlen(s1);
  67. Hash[][n]=Hash[][n]=;
  68. for(int i=n-;i>=;i--)
  69. {
  70. Hash[][i]=Hash[][i+]*seed+(s1[i]-'a'+);
  71. Hash[][i]=Hash[][i+]*seed+(s2[i]-'a'+);
  72. }
  73. kmp(s1,s2,);
  74. kmp(s2,s1,);
  75. for(int i=;i<n;i++) printf("%d",ans[i]);
  76. puts("");
  77. }
  78. return ;
  79. }

HDU 5782 Cycle(KMP+哈希)的更多相关文章

  1. HDU 5782 Cycle —— KMP

    题目:Cycle 链接:http://acm.hdu.edu.cn/showproblem.php?pid=5782 题意:给出两个字符串,判断两个字符串的每一个前缀是否循环相等(比如abc 和 ca ...

  2. HDU 5782 Cycle(KMP+Hash)

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=5782 [题目大意] 给出两个字符串,判断他们每一个前缀是否循环同构,循环同构的意思就是,字符串首位 ...

  3. HDU 5763 Another Meaning (KMP/哈希+DP)

    题目大意:给你两个串,一长一短,如果长串中某个子串和短串完全相同,则这个子串可以被替换成"#",求长串所有的表达形式....... 比如"hehehehe"和& ...

  4. hdu 5782(kmp+hash)

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

  5. HDU 2087  KMP模板题

    1.HDU 2087 2.题意:一个主串,一个子串,求子串在主串里出现了几次. 3.总结:看了题解,还是不太懂.. //#include<iostream>#include<cmat ...

  6. Number Sequence HDU 1711(KMP)

    http://acm.hdu.edu.cn/showproblem.php?pid=1711 首次接触KMP,自己都不是特别理解.在网上百度看了好几个帖子之后,对KMP也有了初步的理解. #inclu ...

  7. [HDU 4821] String (字符串哈希)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4821 题目大意:给你M,L两个字母,问你给定字串里不含M个长度为L的两两相同的子串有多少个? 哈希+枚 ...

  8. hdu 1686 Oulipo KMP匹配次数统计

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1686 分析:典型的KMP算法,统计字符串匹配的次数. 用Next数组压缩时间复杂度,要做一些修改. / ...

  9. HDU 4763 (KMP算法)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4763 题目大意:给定一串字符,从中找出符合“EAEBE”格式的E的最大字符数.AB可以是任意数量的任意 ...

随机推荐

  1. PyCharm 2017.2.3 版本在2017年9月7日发布,支持 Docker Compose

    PyCharm是由JetBrains打造的一款Python IDE.PyCharm具备用于一般IDE的功能,比如, 调试.语法高亮.Project管理.代码跳转.智能提示.自动完成.单元测试.版本控制 ...

  2. tomcat2章2

    package ex02.pyrmont1; import java.io.File; public class Constants { public static final String WEB_ ...

  3. 文字列大好きいろはちゃんイージー / Iroha Loves Strings (ABC Edition) (优先队列)

    题目链接:http://abc042.contest.atcoder.jp/tasks/abc042_b Time limit : 2sec / Memory limit : 256MB Score ...

  4. P2800 又上锁妖塔

    P2800 又上锁妖塔  [温馨提示]使用仙术时飞过一层塔不花费时间,若爬过去,该层有多高,就要花费多长时间     我们可以用 f [ i ] 表示到达第 i 层时所用最短时间   到达第 i 层可 ...

  5. java加载配置文件信息

    #基金数据存放根目录fund_save_root_path=E:/fundCrawling #龙虎榜数据存放根目录long_hu_root_path=E:/longHuCrawling #巨潮数据存放 ...

  6. js 实现复制粘贴时注意方法中需要两次点击实现的bug

    方法一:利用ZeroClipboard 详见 :http://www.jb51.net/article/22403.htm 1先引入 <script type="text/javasc ...

  7. GoldenGate实时投递数据到大数据平台(5) - Kafka

    Oracle GoldenGate是Oracle公司的实时数据复制软件,支持关系型数据库和多种大数据平台.从GoldenGate 12.2开始,GoldenGate支持直接投递数据到Kafka等平台, ...

  8. 02:saltstack-api使用详解

    1.1 salt-api安装   参考博客:https://www.jianshu.com/p/012ccdff93cc 1.介绍 1. saltsatck本身就提供了一套算完整的api,使用 Che ...

  9. Qone 自动删除说说脚本

    请看图 script var delay = 1000; function del() { document.querySelector('.app_canvas_frame').contentDoc ...

  10. python简说(十一)os模块

    import osres = os.listdir('/Users/nhy/Desktop') #列出某个目录下的所有文件# os.remove()# os.rename()# os.mkdir(r' ...