题解:hash

至今不会unsigned long long 的输出

把B扔进map

找A[mid+1][lenA]在A[1][mid]中的位置

把A[1][mid]贴两遍(套路)

枚举A[mid+1][lenA]在A[1][mid]中出现的位置,把其他位置的hash值求出来,在map里查有多少符合的B串

#include<iostream>
#include<cstdio>
#include<cstring>
#include<map>
#include<algorithm>
using namespace std;
const int maxn=8000009;
typedef unsigned long long uLint;int n,m,lenA,lenB,mid;
char s[maxn];
long long ans;int r;
uLint h[maxn];
uLint fac[maxn];
map<uLint,int>ma;
uLint a[maxn];
void Addstring(){int cnt=0;uLint midstring=0;for(int i=mid+1;i<=lenA;++i)midstring=midstring*233+s[i];for(int i=1;i<=mid;++i)s[i+mid]=s[i];h[0]=0;for(int i=1;i<=mid+mid;++i)h[i]=h[i-1]*233+s[i];for(int i=1;i<=mid;++i){uLint tm=h[i+r-1]-h[i-1]*fac[r];if(tm!=midstring)continue;a[++cnt]=h[i+mid-1]-h[i+r-1]*fac[mid-r];}sort(a+1,a+1+cnt);cnt=unique(a+1,a+1+cnt)-a-1;for(int i=1;i<=cnt;++i)ma[a[i]]++;
}int main(){scanf("%d%d%d%d",&n,&m,&lenA,&lenB);fac[0]=1;for(int i=1;i<=lenA+lenA;++i)fac[i]=fac[i-1]*233;mid=(lenA+lenB)>>1;r=lenA-mid;while(n--){scanf("%s",s+1);Addstring();}while(m--){scanf("%s",s+1);uLint tm=0;for(int i=1;i<=lenB;++i)tm=tm*233+s[i];ans=ans+ma[tm];}cout<<ans<<endl;return 0;
}

  

转载于:https://www.cnblogs.com/zzyer/p/8505531.html

BZOJ 4084 [Sdoi2015]双旋转字符串相关推荐

  1. 4084: [Sdoi2015]双旋转字符串

    4084: [Sdoi2015]双旋转字符串 Time Limit: 10 Sec  Memory Limit: 512 MB Submit: 394  Solved: 161 [Submit][St ...

  2. 【BZOJ】4084: [Sdoi2015]双旋转字符串 哈希

    传送门:bzoj4084 题解 题面非常坑!!! 要求的是Si+TjSi+TjS_i+T_j,但实际上任意Tj+SiTj+SiT_j+S_i也可以算. AC的程序跑出的两组数据: input: 1 1 ...

  3. [bzoj4084][Sdoi2015]双旋转字符串_hash

    双旋转字符串 bzoj-4084 Sdoi-2015 题目大意:给定两个字符串集合 S 和 T .其中 S 中的所有字符串长度都恰好为 N ,而 T 中所有字符串长度都恰好为 M .且 N+M 恰好为 ...

  4. bzoj 4084 双旋转字符串

    给两个集合A,B,找满足要求的(a,b)的对数,可以计算对于a,哪些b成立. 还有就是字符串hash的使用,感觉平时用字符串hash太少了. 1 /************************** ...

  5. 【bzoj4084】【sdoi2015】双旋转字符串

    题解 首先题中说了$n>=m$; 分成的循环串左右两边为本质相同的单循环串循环串,分别长为$l = \frac{n + m}{2} $; 所以$S$串的前$l$位为双循环串的一半$S1$,后一半 ...

  6. 代码随想录算法训练营第八天|344.反转字符串 541. 反转字符串II 剑指Offer 05.替换空格 151.翻转字符串里的单词 剑指Offer58-II.左旋转字符串

    一.344.反转字符串 题目:编写一个函数,其作用是将输入的字符串反转过来.输入字符串以字符数组 char[] 的形式给出. 不要给另外的数组分配额外的空间,你必须原地修改输入数组.使用 O(1) 的 ...

  7. 【编程题目】左旋转字符串 ☆

    26.左旋转字符串(字符串) 题目: 定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部. 如把字符串 abcdef 左旋转 2 位得到字符串 cdefab.请实现字符串左旋转的函数. ...

  8. 经典算法面试题目-判断s2是否是s1的旋转字符串(1.8)

    题目 Assume you have a method isSubstring which checks if one word is a substring of another. Given tw ...

  9. 【剑指offer-Java版】42翻转单词顺序VS左旋转字符串

    反转单词顺序以及左旋转字符串:输入一个英文句子,翻转句子中的单词顺序,单词内部的字母顺序是不变的 – I am a student. -> student. am I 第一步,翻转句子中的所有字 ...

最新文章

  1. Go 知识点(18)— 条件编译(编译标签、文件后缀)
  2. “计算机之子”winter:我的前端学习路线与方法
  3. 高德地图API 简单使用
  4. Linux从入门到精通系列之PPTP
  5. codeforces 580D Kefa and Dishes
  6. 2016-2018年机器学习大赛TOP开源作品汇总
  7. 玩游戏用什么轴的机械键盘好_机械键盘选什么轴?全方面分析各轴手感和区别...
  8. python 安装setuptools时报Compression requires the (missing) zlib module错误的解决方案
  9. linux 线程同步与互斥:读写锁 线程读操作较多,写操作较少时,使用读写锁
  10. content=IE=edge,chrome=1的meta标签内容
  11. 【Kali】kali主要工具使用说明(文末附超全思维导图)
  12. 学习笔记1--汽车发展史及发展趋势
  13. 大疆网上测评题库_【大疆在线测试有几套题啊?】-看准网
  14. toast 弹窗 js
  15. 08-Hibernate3.6.2 查询02 by SQL QBC QBE
  16. 自制力本能:如何提高自我控制力
  17. Win10 自带【屏幕录制】功能(win + G)----(附带:录屏时没有声音,声音不清楚 问题解决;---提取视频中的音频)
  18. linux tail 命令详解,Linux下如何使用tail命令指南
  19. PostgreSQL修改被视图引用的表的字段
  20. 一个半路出家的‘程序员’

热门文章

  1. Squeeze-and-Excitation Networks(SENet) 学习笔记
  2. SV学习笔记—区分always和initial
  3. 主动降噪耳机排行榜10强,主动降噪耳机十大品牌
  4. java属于高级语言_一文告诉你java是高级语言吗?
  5. tp计算机术语是什么意思,tp是什么意思呀?谁能把术语给我解释一下? – 手机爱问...
  6. 极路由和TPLINK wr740n 做无线桥接共享上网
  7. 一个采用BF算法的宝石迷阵的消除解法
  8. Java中new出来的算是对象吗?
  9. 大三老学姨想说。。。
  10. RGB24 To Yuv420 C语言实现