题解: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;
}

  

最新文章

  1. 服务器搭建多个tomcat服务器
  2. 【C++】pair
  3. Asp.net Core WebApi 全局异常类
  4. ARP侦查工具Netdiscover
  5. jQuery:balloon气泡提示插件
  6. android---APN切换
  7. [置顶] 斗地主算法的设计与实现--项目介绍&amp;如何定义和构造一张牌
  8. IIS开启伪静态后html静态页面无法访问的解决方法
  9. zendguard安装破解
  10. Matlab,Visio等生成的图片的字体嵌入问题解决方法
  11. thinkphp学习笔记8—命名空间
  12. Web 版 powerdesigner (Canvas) 技术分享
  13. 探索Windows命令行系列(3):命令行脚本基础
  14. HTML笔记05------AJAX
  15. JVM 类的生命周期、类加载器
  16. 前端ps实用小技巧
  17. 文件上传漏洞靶场:upload-labs安装及第一关教程
  18. 原生开发小程序 和 wepy 、 mpvue, Taro 对比
  19. Python3基础 list in/not in 判断一个变量是否在列表中存在
  20. bootstrap4相关文档

热门文章

  1. db.mybatis.config
  2. Java开发程序员必须要学会的linux命令总结
  3. mqtt已断开连接(32109)
  4. 内存寻址能力与CPU的位宽有关系吗?
  5. cf 762C. Two strings
  6. css快速浏览
  7. 操作系统类型&amp;操作系统结构&amp;现代操作系统基本特征
  8. 错误:selenium.common.exceptions.SessionNotCreatedException: Message: Unable to find a matching set of capabilities
  9. 吴裕雄--天生自然C++语言学习笔记:C++ 数字
  10. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 字体图标(Glyphicons):glyphicon glyphicon-flag