传送门

我的哈希打挂了……然而大佬似乎用哈希可以过还跑得很快……

删除,枚举删哪个字符,记删之后的哈希值存map

插入,相当于在单词里删字符,去对应的map里查找

更改,相当于两个都删掉同一个位置的字符然后相等

//minamoto
#include<bits/stdc++.h>
#define rint register int
#define ull unsigned long long
using namespace std;
const int N=25;
int n,m,len,ans,top;char s[N];
ull Base=233,l[N],r[N],bin[N],h[N];
map<ull,ull>a[N],b[N][N],c[N];
int main(){
// freopen("testdata.in","r",stdin);
scanf("%d%d",&n,&m);
bin[0]=1;for(rint i=1;i<25;++i)bin[i]=bin[i-1]*Base;
while(n--){
scanf("%s",s+1),len=strlen(s+1);
for(rint j=0;j<25;++j)l[j]=r[j]=h[j]=0;
for(rint j=1;j<=len;++j)l[j]=l[j-1]*Base+s[j]-'a'+1;
for(rint j=len;j;--j)r[j]=r[j+1]+(s[j]-'a'+1)*bin[len-j];
++a[len][l[len]];
for(rint j=1;j<=len;++j)
h[j]=l[j-1]*bin[len-j]+r[j+1],++b[len-1][j][h[j]];
sort(h+1,h+1+len);
for(rint j=1;j<=len;++j)if(h[j]!=h[j-1])++c[len-1][h[j]];
}
while(m--){
scanf("%s",s+1),len=strlen(s+1);
for(rint j=0;j<25;++j)l[j]=r[j]=h[j]=0;
for(rint j=1;j<=len;++j)l[j]=l[j-1]*Base+s[j]-'a'+1;
for(rint j=len;j;--j)r[j]=r[j+1]+(s[j]-'a'+1)*bin[len-j];
if(a[len][l[len]]){puts("-1");continue;}
ans=0;
for(rint j=1;j<=len;++j)h[j]=l[j-1]*bin[len-j]+r[j+1];
for(rint j=1;j<=len;++j)ans+=b[len-1][j][h[j]];
sort(h+1,h+1+len);
for(rint j=1;j<=len;++j)if(h[j]!=h[j-1])ans+=a[len-1][h[j]];
ans+=c[len][l[len]];printf("%d\n",ans);
}return 0;
}

最新文章

  1. Git 命令速查图
  2. 用Fragment制作的Tab页面产生的UI重叠问题
  3. 关于phpmyadmin #1045无法登陆服务器的问题
  4. Customizing Navigation Bar and Status Bar
  5. Shell脚本编程初体验
  6. PHP Forms
  7. Microsoft Visual Studio 2010中文版编译SQLlite3.7.0版
  8. UIView的生命周期总结
  9. C++构造/析构/赋值函数
  10. java 正则表达式获取值
  11. OSG项目经验2&lt;在场景中添加文字面版&gt;
  12. PHP基础点滴
  13. javascript 原型及原型链详解
  14. 纯css实现无限嵌套菜单
  15. extjs__(grid Panel绑定数据)
  16. centos 6.5 安装jdk1.8
  17. OneZero第七周第一次站立会议(2016.5.9)
  18. LeetCode题解之 Convert Sorted Array to Binary Search Tree
  19. pandas练习(二)------ 数据过滤与排序
  20. PYTHON 和R的对比

热门文章

  1. 瑞芯微ROCK960 RK3399烧录image后扩容rootfs
  2. linux下Mongodb集群搭建:分片+副本集
  3. PAT 1137 Final Grading
  4. Codeforces 990D - Graph And Its Complement
  5. 封装的一些常见的JS DOM操作和数据处理的函数.
  6. JavaScript学习总结(12)——2016 年 7 个顶级 JavaScript 框架
  7. Android layer-list(3)
  8. 20180710使用gh
  9. Ubuntu 16.04安装PPA图形化管理工具Y PPA Manager
  10. 第3章 ES文档和故障处理