题意:给你2个串,让你判断2个字符串的前缀是否满足首尾连接形成的环是不是一样的。

  思路:我们需要提前知道的是满足条件的前缀一定满足 strA = str1 + str2, strB = str2 + str1。然后我们先求出其中的一个的KMP,然后去匹配,那么我们匹配过程中一定会有一个公共长度j,那么我们利用好j这一段再加上判断剩下的部分是不是相等的就好了,那么这一段就可以相当于str2,然后我们再用带有顺序的hash技术,将其他的映射出来就好了,然后用的时候直接乘上当前值的进制值就好了,就是有一个需要移一下位才能进行同等级的比较。

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3.  
  4. const int maxn = 1e4 + ;
  5. const int base = ;
  6.  
  7. long long p[maxn], hass[][maxn];
  8. int n, nex[maxn];
  9. char A[maxn], B[maxn];
  10. bool ans[maxn];
  11.  
  12. long long getVal(int t, int l, int r){
  13. return hass[t][r] - hass[t][l - ] * p[r - l + ];
  14. }
  15.  
  16. bool check(int t, int a, int b){
  17. if(a == b) return true;
  18. return getVal(t, a + , b) == getVal(t^, , b - a);
  19. }
  20.  
  21. void kmp(int al, char a[], int bl, char b[], int t){
  22. int i, j;
  23. for(nex[] = j = , i = ; i <= al; nex[i ++] = j){
  24. while(j && a[j + ] != a[i]) j = nex[j];
  25. if(a[j + ] == a[i]) j ++;
  26. }
  27.  
  28. for(j = , i = ; i <= bl; i ++){
  29. while(j && a[j + ] != b[i]) j = nex[j];
  30. if(a[j + ] == b[i]){
  31. j ++;
  32. if(!ans[i]) ans[i] = check(t, j, i);
  33. }
  34. if(j == al) j = nex[j];
  35. }
  36. }
  37.  
  38. int main(){
  39. //freopen("data", "r", stdin);
  40. for(int i = p[] = ; i < maxn; i ++) p[i] = p[i - ] * base;
  41. while(~scanf(" %s %s", A + , B + )){
  42. int len = strlen(A + );
  43. for(int i = ; i <= len; i ++){
  44. ans[i] = false;
  45. hass[][i] = hass[][i - ] * base + A[i];
  46. hass[][i] = hass[][i - ] * base + B[i];
  47. }
  48. kmp(len, A, len, B, );
  49. kmp(len, B, len, A, );
  50. for(int i = ; i <= len; i++ ) printf("%c", ""[ans[i]]);printf("\n");
  51. }
  52. return ;
  53. }

Cycle (KMP + hash)的更多相关文章

  1. Codeforces 1090J $kmp+hash+$二分

    题意 给出两个字符串\(s\)和\(t\),设\(S\)为\(s\)的任意一个非空前缀,\(T\)为\(t\)的任意一个非空前缀,问\(S+T\)有多少种不同的可能. Solution 看了一圈,感觉 ...

  2. HDU 5782 Cycle(KMP+Hash)

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

  3. hdu 5782(kmp+hash)

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

  4. 【BZOJ3940】【BZOJ3942】[Usaco2015 Feb]Censoring AC自动机/KMP/hash+栈

    [BZOJ3942][Usaco2015 Feb]Censoring Description Farmer John has purchased a subscription to Good Hoov ...

  5. 【POJ2185】【KMP + HASH】Milking Grid

    Description Every morning when they are milked, the Farmer John's cows form a rectangular grid that ...

  6. HDU 5782 Cycle —— KMP

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

  7. bzoj4641 基因改造 KMP / hash

    依稀记得,$NOIP$之前的我是如此的弱小.... 完全不会$KMP$的写法,只会暴力$hash$.... 大体思路为把一个串的哈希值拆成$26$个字母的位权 即$hash(S) = \sum\lim ...

  8. 7.26机房报零赛——无尽的矩阵【kmp+hash】

    恩,其实大家都没有报零,反正我是蒟蒻 为了纪念我第一次打过哈希,特此写一篇题解 题目描述 从前有一个的小矩阵,矩阵的每个元素是一个字母(区分大小写),突然有一天它发生了 变异,覆盖了整个二维空间,即不 ...

  9. D. Tavas and Malekas DFS模拟 + kmp + hash || kmp + hash

    http://codeforces.com/contest/535/problem/D 如果真的要把m个串覆盖上一个串上面,是可以得,不会超时. 要注意到一点,全部覆盖后再判断时候合法,和边放边判断, ...

随机推荐

  1. 【QT】二进制读取图像文件测试

    QDataStream in(&file); int n; in >> n ; file.close(); qDebug() << n<<"en& ...

  2. python print 打印的数据包含中文,打印报错UnicodeDecodeError: 'gbk' codec can't decode bytes in position 459-460: illegal multibyte sequence解决办法

    python 2.7 print 的数据中若包括中文,打印则会报错UnicodeDecodeError: 'gbk' codec can't decode bytes in position 459- ...

  3. poj 2826

    太自闭了...明明很水的说... 有三种为0的情况.一种是有水平,一种是没交点. 第三种有点难想啊.就是下面那个板子被上面的挡住了,,雨水进不去... 关键是我翻了翻discuss找到了这种数据,,但 ...

  4. Yarn Node Labels

    Yarn Node Labels + Capacity-Scheduler 在yarn-site.xml中开启capacity-schedule yarn-site.xml <property& ...

  5. yarn配置日志聚合

    [原文地址] 日志聚集是YARN提供的日志中央化管理功能,它能将运行完成的Container/任务日志上传到HDFS上,从而减轻NodeManager负载,且提供一个中央化存储和分析机制.默认情况下, ...

  6. layui封装自定义模块

    转自:https://lianghongbo.cn/blog/430585105a35948c layui是国人开发的一款非常简洁的UI框架,使用了模块化加载方式,因此在使用过程中我们难免需要添加自己 ...

  7. kubernetes组成

    kubernetes组成 k8s主要包括: kubectl 客户端命令行工具: 将接收的命令,发送给kube-apiserver,作为对整个平台操作的入口. kube-apiserver REST A ...

  8. DEMO大全,超赞【申明:来源于网络】

    DEMO大全,超赞[申明:来源于网络] 地址:http://www.verydemo.com/one_c55.html

  9. 树莓派3 之 pi3Robot 控制系统配置

    需求 个人正在用Python写一个控制系统,技术选型是python3 + Flask + Mysql + Bootstrap.需要将这套系统直接部署到树莓派中. 代码地址:https://github ...

  10. java之threadlocal的使用

    基本介绍 ThreadLocal很多地方叫线程本地变量,或者叫线程本地存储.ThreadLocal为每一个使用该变量的线程都提供一个变量值的副本,是每一个线程都可以独立地改变自己的副本,而不会和其它线 ...