luogu4407 [JSOI2009]电子字典 字符串hash + hash表

暴力枚举,然后\(hash\)表判断
复杂度\(O(26 * 20 * n)\)
具体而言
对于操作1:暴力枚举删除
对于操作2:暴力添加,注意添加不要重复
对于操作3:暴力替换,同样的注意不要重复
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
#define ri register int
#define ull unsigned long long
#define rep(io, st, ed) for(ri io = st; io <= ed; io ++)
#define drep(io, ed, st) for(ri io = ed; io >= st; io --)
const int yume = 19260817;
const int sid = 4300050;
char s[50];
int n, m, L, cnp;
ull num, pre[50], wei[50];
int cap[sid], nxt[sid], val[sid];
ull fz[sid];
inline int get(ull v) {
int k = v & 4194303;
for(int i = cap[k]; i; i = nxt[i])
if(fz[i] == v) return i;
return 0;
}
inline void ins(ull v) {
int k = v & 4194303;
int p = get(v);
if(!p) {
nxt[++ cnp] = cap[k]; fz[cnp] = v;
cap[k] = cnp; val[cnp] = 1;
}
else val[p] ++;
}
inline ull v(int l, int r) {
if(l > r) return 0;
return pre[r] - pre[l - 1] * wei[r - l + 1];
}
inline ull calc1(int p) { return v(1, p - 1) * wei[L - p] + v(p + 1, L); }
inline ull calc2(int p, char c) { return v(1, p - 1) * wei[L - p + 1] + v(p + 1, L) + c * wei[L - p]; }
inline ull calc3(int p, char c) { return v(1, p) * wei[L - p + 1] + v(p + 1, L) + c * wei[L - p]; }
int main() {
wei[0] = 1;
rep(i, 1, 30) wei[i] = wei[i - 1] * yume;
cin >> n >> m;
rep(i, 1, n) {
scanf("%s", s + 1); L = strlen(s + 1); num = 0;
rep(j, 1, L) num = num * yume + s[j];
ins(num);
}
rep(i, 1, m) {
scanf("%s", s + 1); L = strlen(s + 1);
rep(j, 1, L) pre[j] = pre[j - 1] * yume + s[j];
if(get(pre[L])) { printf("-1\n"); continue; }
int ans = 0;
rep(j, 1, L)
if(s[j] != s[j - 1])
ans += val[get(calc1(j))];
rep(j, 1, L) rep(c, 'a', 'z')
if(c != s[j])
ans += val[get(calc2(j, c))];
rep(j, 0, L) rep(c, 'a', 'z')
if(c != s[j + 1])
ans += val[get(calc3(j, c))];
printf("%d\n", ans);
}
return 0;
}
luogu4407 [JSOI2009]电子字典 字符串hash + hash表的更多相关文章
- 洛谷P4407 [JSOI2009]电子字典
题目描述 人们在英文字典中查找某个单词的时候可能不知道该单词的完整拼法,而只知道该单词的一个错误的近似拼法,这时人们可能陷入困境,为了查找一个单词而浪费大量的时间.带有模糊查询功能的电子字典能够从一定 ...
- [JSOI2009]电子字典 hash
题面:洛谷 题解: 做法....非常暴力. 因为要求的编辑距离最多只有1,所以我们直接枚举对那个位置(字符)进行操作,进行什么样的操作,加入/修改/删除哪个字符,然后暴力枚举hash判断即可, #in ...
- P4407 [JSOI2009]电子字典
传送门 我的哈希打挂了--然而大佬似乎用哈希可以过还跑得很快-- 删除,枚举删哪个字符,记删之后的哈希值存map 插入,相当于在单词里删字符,去对应的map里查找 更改,相当于两个都删掉同一个位置的字 ...
- redis 2 字符串 和 hash
string是最简单的类型,一个key对应一个value,string类型是二进制安全的.redis的string可以包含任何数据,比如JPG图片或者序列化的对象 操作 set 设置key ...
- 数据结构之哈希(hash)表
最近看PHP数组底层结构,用到了哈希表,所以还是老老实实回去看结构,在这里去总结一下. 1.哈希表的定义 这里先说一下哈希(hash)表的定义:哈希表是一种根据关键码去寻找值的数据映射结构,该结构通过 ...
- redis字典快速映射+hash釜底抽薪+渐进式rehash | redis为什么那么快
前言 相信你一定使用过新华字典吧!小时候不会读的字都是通过字典去查找的.在Redis中也存在相同功能叫做字典又称为符号表!是一种保存键值对的抽象数据结构 本篇仍然定位在[redis前传]系列中,因为本 ...
- mycat1.6.5分片(字符串拆分hash)
https://blog.csdn.net/webnum/article/details/78313525 分片规则:字符串拆分hash 一.conf/schema.xml文件 <?xm ...
- Linux命令之Hash缓存表
Hash缓存表 系统初始hash表为空,当外部命令执行时,默认会从PATH路径下寻找该命令,找到后会将这条命令的路径记录到hash表中,当再次使用该命令时,shell解释器首先会查看hash表,存在将 ...
- 字符串转hash进阶版
#include<bits/stdc++.h> using namespace std; ,mod=; vector<unsigned> H[mod]; void Add(un ...
随机推荐
- UNIX网络编程 第6章 I/O复用:select和poll函数
UNIX网络编程 第6章 I/O复用:select和poll函数
- transform 动画效果
http://www.css88.com/tool/css3Preview/Transform.html transform的含义是:改变,使…变形:转换 transform的属性包括:rotate( ...
- DRM学习总结(1)--- DRM框架介绍
一.DRM 简介 In computing, the Direct Rendering Manager (DRM), a subsystem of the Linux kernel, interfac ...
- Jenkins+Ant+TestNG+Testlink自动化构建集成
这段时间折腾自动化测试,之前都是在Eclipse工程里面手工执行自动化测试脚本,调用Testlink API执行测试用例,目前搭建Jenkins自动化构建测试的方式,实现持续构建,执行自动化测试. 硬 ...
- poj3636
题意:每个物品有两个属性:长和宽(长宽不可互换).如果一个物品的长和宽均大于另一个物品,则这个物品可以罩住另一个物品,用这种罩住物品的方法将物品分组,一组之内的物品可以一个罩住一个的全部罩起来.问最少 ...
- Go 的package
一.包的一些基本的概念 1.在同一个目录下的所有go文件中,只能有一个main函数.如果存在多个main函数,则在编译的时候会报错 那么,在同一个目录下的两个go文件究竟是什么关系? 为什么会彼此影响 ...
- 【转】shell命令中>/dev/null 2>&1的实现原理
异步执行 exec("/alidata/server/php/bin/php /nas/wxdoctor/index.php App/Common/WordsPic/user_id/&quo ...
- maven pom.xml配置
<repositories> <repository> <id>central</id> <name>Maven Repository Sw ...
- CF312B 【Archer】
容易算出这人第一次胜利的概率,第二次的,第三次的…… 好像可以无限乘下去 但是这题精度卡到1e-6 不妨设一个eps,当这次胜率小于eps时,就break掉,反正它已经不影响答案了 我设的是eps=1 ...
- javaweb笔记二
web服务器:实现服务器的开启,监听端口,接收客户端请求,产生响应.响应信息只能是静态的HTML,缺乏灵活性.web容器:是辅助应用的一种方式,是为了解决web服务器缺陷而产生的.可以将请求信息处理完 ...