Bless You Autocorrect!
题目链接:
https://odzkskevi.qnssl.com/0c87453efec2747f8e8a573525fd42f9?v=1533651456
题解:
这是一道Trie+BFS的题目; 这是第二次写了 Orz 还是WA好几发;
这一题,我们可以用字典树存已有的单词,在存的时候,记录一下该节点所能到达的最深的位置,并且记录它的父亲节点;
然后BFS跑一遍,对于每一步只有3种走法,走这一个字母,删除该位置的父亲字母,跳到它所能到达的最深位置;然后者
每一步都是在上一个字母的基础上步数加一的;
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<queue>
#include<cmath>
#include<map>
#include<algorithm>
using namespace std;
typedef long long LL;
const int INF=0x3f3f3f3f;
const LL inf=0x3f3f3f3f3f3f3f3fLL;
const int maxn=2e6+;
const int sigma_size=;
char s[maxn]; struct Trie{
int ch[maxn][sigma_size];
int flag[maxn],fa[maxn],dep[maxn],vis[maxn];
int pos,root; int Idx(char ch) { return ch-'a'; } void Init()
{
pos=;root=;
memset(ch,,sizeof ch);
memset(dep,,sizeof dep);
memset(vis,,sizeof vis);
memset(flag,-,sizeof flag);
memset(fa,-,sizeof fa);
} void Insert(char *s)
{
int u=,n=strlen(s);
for(int i=;i<n;i++)
{
int c=Idx(s[i]);
if(!ch[u][c])
{
ch[u][c]=pos++;
fa[ch[u][c]]=u;
}
u=ch[u][c];
}
int end=u;
u=;
for(int i=;i<n;i++)
{
int c=Idx(s[i]);
u=ch[u][c];
if(flag[u]==-) flag[u]=end;
}
} void Search()
{
queue<int> q;
q.push(root); vis[root]=; dep[root]=;
while(!q.empty())
{
int u=q.front(); q.pop(); for(int i=;i<;i++)
{
if(!ch[u][i] || vis[ch[u][i]]) continue;
vis[ch[u][i]]=;
dep[ch[u][i]]=dep[u]+;
q.push(ch[u][i]);
} int v=fa[u];
if(v!=- && !vis[v])
{
vis[v]=;
dep[v]=dep[u]+;
q.push(v);
} v=flag[u];
if(v!=- && !vis[v])
{
vis[v]=;
dep[v]=dep[u]+;
q.push(v);
}
}
} int Query(char *s)
{
int u=,i;
for(i=;i<strlen(s);i++)
{
if(!ch[u][Idx(s[i])]) break;
u=ch[u][Idx(s[i])];
}
return dep[u]+strlen(s)-i; //没有的还要一个一个打上去
} } Tree; int main()
{
int n,m;
while(scanf("%d%d",&n,&m)!=EOF)
{
Tree.Init();
for(int i=;i<=n;i++)
{
scanf("%s",s);
Tree.Insert(s);
}
Tree.Search();
for(int i=;i<=m;i++)
{
scanf("%s",s);
cout<<Tree.Query(s)<<endl;
}
}
return ;
}
Bless You Autocorrect!的更多相关文章
- [tire+最短路]Bless You Autocorrect!
[tire+最短路]Bless You Autocorrect! Typing on phones can be tedious. It is easy to make typing mistakes ...
- Urozero Autumn 2016. NCPC 2016
A. Artwork 倒过来并查集维护即可. #include<cstdio> #include<algorithm> using namespace std; const i ...
- Nordic Collegiate Programming Contest (NCPC) 2016
A Artwork B Bless You Autocorrect! C Card Hand Sorting D Daydreaming Stockbroker 贪心,低买高卖,不要爆int. #in ...
- ubuntu bless 16字节每行
打开Preferences配置 输入路径:/usr/share/bless/bless-16-bytes-per-row.layout 或者使用以下配置 cat /home/scue/.config/ ...
- autocapticalize和autocorrect
首字母自动大写autocapitalize 在 iOS 中,用户可以手动开启「首字母自动大写」功能,这样输入英文的时候,首字母便会自动大写.但是,有些时候并不希望一直是首字母大写的.比如用户名这个字段 ...
- perl 对象 通过bless实现
对象只是一种特殊的引用,它知道自己是和哪个类关联在一起的,而构造器知道如何创建那种关联关系. 这些构造器是通过使用bless操作符,将一个普通的引用物转换成一个对象实现的,
- perl 对象 bless 引用
[root@dr-mysql01 ~]# cat aa.pl use LWP::UserAgent; use Data::Dumper; my $ua = LWP::UserAgent->new ...
- 【Perl学习笔记】2. perl中的bless理解
bless有两个参数:对象的引用.类的名称. 类的名称是一个字符串,代表了类的类型信息,这是理解bless的关键. 所谓bless就是把 类型信息 赋予 实例变量. 程序包括5个文件:person.p ...
- BLESS学习笔记
BLESS全称:Bloom-filter-based Error Correction Solution for High-throughput Sequencing Reads,即基于布隆过滤器的高 ...
随机推荐
- 201871010114-李岩松《面向对象程序设计(java)》第四周学习总结
项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p ...
- IO类
Java的IO体系分为Input/Output和Reader/Writer两类,区别在于Reader/Writer在读写文本时能自动转换内码.基本上,所有的IO类多是配对的,即有XXXInput,就有 ...
- Hbase简介以及简单的入门操作
Hbase是一个分布式的.面向列的开源数据库,可实时的读写.随机访问超大规模的数据集. Hbase主要分为两种模型: 逻辑模型和物理模型 1. 逻辑模型 Hbase的名字的来源是Hadoop data ...
- 图片转换成base64预览
来源:https://developer.mozilla.org/zh-CN/docs/Web/API/FileReader/readAsDataURL 真心不错写得,思路比较清晰.已经测试过 注意: ...
- 了解Spring的基本概念
参考资料:https://www.jianshu.com/p/1c483bd8fd6d 在正式学习Spring框架之前,肯定有很多疑问,比如说: 1.Spring中经常出现的IOC.AOP.DI是什么 ...
- SQL的四种连接(左外连接、右外连接、内连接、全连接)
1.内联接(典型的联接运算,使用像 = 或 <> 之类的比较运算符).包括相等联接和自然联接. 内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行.例如,检索 stude ...
- Jumpserver v2.0.0 使用说明
官方文档:http://www.jumpserver.org/ — 登录脚本 — 1.1 使用paramiko原生ssh协议登录后端主机(原来版本使用pexpect模拟登录) 1.2 新增使用别名或备 ...
- JavaWeb核心知识点
一:HTTP协议 一.概述 1. 概念:超文本传输协议 2. 作用:规范了客户端(浏览器)和服务器的数据交互格式 3. 特点 1. 简单快速:客户端向服务器请求服务时,仅通过键值对来传输请求方 ...
- VueJS学习之Vue-cli项目模板
1. 首先是学习vue时需要依赖于node.js和webpack打包工具,具体的安装如下 http://nodejs.cn/download/下载安装nodejs,具体的安装步骤不在此赘述 2. 安装 ...
- Hadoop MapReduce常用输入输出格式
这里介绍MapReduce常用的几种输入输出格式. 三种常用的输入格式:TextInputFormat , SequenceFileInputFormat , KeyValueInputFormat ...