题面:洛谷

题解:

  做法。。。。非常暴力。

  因为要求的编辑距离最多只有1,所以我们直接枚举对那个位置(字符)进行操作,进行什么样的操作,加入/修改/删除哪个字符,然后暴力枚举hash判断即可,

 #include<bits/stdc++.h>
using namespace std;
#define R register int
#define AC 25
#define ac 10100
#define base 26
#define LL long long
#define us unsigned int n, m, len, ans, cnt, dfn;
int id[ac];
us LL hs[ac], qw[AC], ls[AC], rs[AC];
char s[AC]; void build()
{
scanf("%s", s + ), len = strlen(s + ), ++ cnt;
for(R i = ; i <= len; i ++) hs[cnt] = hs[cnt] * base + s[i];
} void pre()
{
scanf("%d%d", &n, &m);
for(R i = ; i <= n; i ++) build();
sort(hs + , hs + n + );
qw[] = ;
for(R i = ; i <= ; i ++) qw[i] = qw[i - ] * base;
} bool half(us LL x)
{
int l = , r = n, mid;
while(l < r)
{
mid = (l + r) >> ;
if(hs[mid] == x)
{
if(id[mid] == dfn) return false;
id[mid] = dfn; return true;
}
else if(hs[mid] < x) l = mid + ;
else r = mid - ;
}
if(hs[l] != x) return false;
if(id[l] == dfn) return false;
id[l] = dfn; return true;
} bool check()
{
scanf("%s", s + ), len = strlen(s + ), ans = , ++ dfn;
us LL x = ;
memset(rs, , sizeof(rs));//why?????大概是因为下面判断的时候可能用到r[len + 1]吧,而r[len + 1]应该要=0的
for(R i = ; i <= len; i ++) x = x * base + s[i];
if(half(x))
{
printf("-1\n");
return true;
}
for(R i = ; i <= len; i ++) ls[i] = ls[i - ] * base + s[i];
for(R i = ; i <= len; i ++) rs[i] = ls[len] - ls[i - ] * qw[len - i + ];
//for(R i = 1; i <= len; i ++) printf("%lld ", rs[i]);
//printf("\n");
return false;
} void get()
{
us LL x;
for(R i = ; i <= len; i ++)//枚举对哪一位进行操作,
{//如果是插入的话就是在这个位置的后面插入
if(i)//只有i > 0才可以删除和修改
{
for(R j = ; j < ; j ++)//枚举修改成哪个
{
x = ls[i - ] * qw[len - i + ] + 1LL * (j + 'a') * qw[len - i] + rs[i + ];
if(half(x)) ans ++;
}
x = ls[i - ] * qw[len - i] + rs[i + ];
if(half(x)) ans ++;
}
for(R j = ; j < ; j ++)//枚举在后面插入哪个
{
x = ls[i] * qw[len - i + ] + 1LL * (j + 'a') * qw[len - i] + rs[i + ];
if(half(x)) ans ++;
}
}
printf("%d\n", ans);
} void work()
{
for(R i = ; i <= m; i ++)
{
if(check()) continue;
get();
}
} int main()
{
// freopen("in.in", "r", stdin);
pre();
work();
// fclose(stdin);
return ;
}

[JSOI2009]电子字典 hash的更多相关文章

  1. 洛谷P4407 [JSOI2009]电子字典

    题目描述 人们在英文字典中查找某个单词的时候可能不知道该单词的完整拼法,而只知道该单词的一个错误的近似拼法,这时人们可能陷入困境,为了查找一个单词而浪费大量的时间.带有模糊查询功能的电子字典能够从一定 ...

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

    暴力枚举,然后\(hash\)表判断 复杂度\(O(26 * 20 * n)\) 具体而言 对于操作1:暴力枚举删除 对于操作2:暴力添加,注意添加不要重复 对于操作3:暴力替换,同样的注意不要重复 ...

  3. P4407 [JSOI2009]电子字典

    传送门 我的哈希打挂了--然而大佬似乎用哈希可以过还跑得很快-- 删除,枚举删哪个字符,记删之后的哈希值存map 插入,相当于在单词里删字符,去对应的map里查找 更改,相当于两个都删掉同一个位置的字 ...

  4. 2786: [JSOI]Word Query电子字典

    2786: [JSOI]Word Query电子字典 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 3  Solved: 3[Submit][Statu ...

  5. 1819: [JSOI]Word Query电子字典

    1819: [JSOI]Word Query电子字典 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 729  Solved: 238[Submit][S ...

  6. bzoj 1819: 电子字典 Trie

    题目: Description 人们在英文字典中查找某个单词的时候可能不知道该单词的完整拼法,而只知道该单词的一个错误的近似拼法,这时人们可能陷入困境,为了查找一个单词而浪费大量的时间.带有模糊查询功 ...

  7. 字典 hash

    字典是按照hash存的,他会映射一个hash表,所以查找的时候根据一些算法会很快: 参考: https://harveyqing.gitbooks.io/python-read-and-write/c ...

  8. [bzoj1819] [JSOI]Word Query电子字典

    正解是trie树...在树上跳来跳去什么的 然而在企鹅qq那题的影响下我写了hash... 添加一个字母到一个串,就相当于另一个串删对应位置上的字母. 改变某个位置上的字母,就相当于两个字符串删掉同一 ...

  9. BZOJ1819 [JSOI]Word Query电子字典 Trie

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1819 题意概括 字符串a与字符串b的编辑距离是指:允许对a或b串进行下列“编辑”操作,将a变为b或 ...

随机推荐

  1. hadoop2.0(chd4) 通过API获取job信息

    hadoop 版本儿:hadoop-2.0-cdh4.3.0 想做一个hive的命令的schedule,所以必须获取正在运行的job的数量. 到网上查了一通,一开始用了JobClient,怎么弄都是N ...

  2. PHP Redis 缓存数据

    // 注:只是在此做下记录,有兴趣的可以参考,不做实际教程文档// 配置文件define('CONFIG', [ 'redis-server' => '127.0.0.1', 'redis-po ...

  3. 面试之HTTP基础(不断完善中)

    目录 1. HTTP状态码 2.Cookie和Session Cookie Session 3.短连接与长连接 4.HTTPs 加密 5.Http和https的区别 6.HTTP/1.0 与 HTTP ...

  4. oss上传文件0字节

    最近使用oss上传文件,不同项目中使用的版本也不同,之前的都能正常上传,最近因需要添加ObjectMetaData属性,扩展了一个方法,发现上传的文件始终是0字节的,最终跟源码发现conntentLe ...

  5. DNS递归查询与迭代查询

    注:一般TCP/IP的应用层或者OSI的会话.表示.应用层把数据称为数据或者信息,到了传输层把数据称为报文,到了最底层就是比特流了也就是字节流 DNS递归查询与迭代查询   基础知识 1.域名系统 2 ...

  6. 如何隐藏掉SQL Server中自带系统数据库,数据表,存储过程等显示文件,只显示用户的数据库,数据表等文件

    企业管理器了,---->   编辑该数据库的注册属性--->“常规”属性页下面-->“显示系统数据库和系统对象”的选项去掉

  7. Fluent Python: memoryview

    关于Python的memoryview内置类,搜索国内网站相关博客后发现对其解释都很简单, 我觉得学习一个新的知识点一般都要弄清楚两点: 1, 什么时候使用?(也就是能解决什么问题) 2,如何使用? ...

  8. js操作对象属性值为字符串

    今天在项目开发中遇到一个没遇到过的问题,这个问题是需要对比两个对象a和b,a是一个只有一个属性的对象,b是一个含有多个属性对象,如果b中包含和a一模一样的属性名和值,则把这个一样的属性和值从b中删除了 ...

  9. C# 钱数 小写 转 大写

    public class Rmb { /// <summary> /// 转换人民币大小金额 /// </summary> /// <param name="n ...

  10. 20181120-8 Beta阶段第2周/共2周 Scrum立会报告+燃尽图 06

    此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2414 版本控制地址    [https://git.coding.net ...