P4407 [JSOI2009]电子字典
2024-08-31 01:08:12
我的哈希打挂了……然而大佬似乎用哈希可以过还跑得很快……
删除,枚举删哪个字符,记删之后的哈希值存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;
}
最新文章
- Git 命令速查图
- 用Fragment制作的Tab页面产生的UI重叠问题
- 关于phpmyadmin #1045无法登陆服务器的问题
- Customizing Navigation Bar and Status Bar
- Shell脚本编程初体验
- PHP Forms
- Microsoft Visual Studio 2010中文版编译SQLlite3.7.0版
- UIView的生命周期总结
- C++构造/析构/赋值函数
- java 正则表达式获取值
- OSG项目经验2<;在场景中添加文字面版>;
- PHP基础点滴
- javascript 原型及原型链详解
- 纯css实现无限嵌套菜单
- extjs__(grid Panel绑定数据)
- centos 6.5 安装jdk1.8
- OneZero第七周第一次站立会议(2016.5.9)
- LeetCode题解之 Convert Sorted Array to Binary Search Tree
- pandas练习(二)------ 数据过滤与排序
- PYTHON 和R的对比
热门文章
- 瑞芯微ROCK960 RK3399烧录image后扩容rootfs
- linux下Mongodb集群搭建:分片+副本集
- PAT 1137 Final Grading
- Codeforces 990D - Graph And Its Complement
- 封装的一些常见的JS DOM操作和数据处理的函数.
- JavaScript学习总结(12)——2016 年 7 个顶级 JavaScript 框架
- Android layer-list(3)
- 20180710使用gh
- Ubuntu 16.04安装PPA图形化管理工具Y PPA Manager
- 第3章 ES文档和故障处理