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,即基于布隆过滤器的高 ...
随机推荐
- 说一说,“NetWork Wall”所用到技术
2010年1月17日,Google在其官方网站上发布了一篇名为<A new approach to China>的博文,在博文中,Google官方透露,将停止过滤搜索结果.在国内市场上停止 ...
- jvm与程序的生命周期
yls 2019/11/5 java虚拟机结束生命周期的情况: 执行了System.exit(); 程序正常运行结束 程序在执行过程中遇到异常或错误而异常终止 由于操作系统出现错误而导致jvm进程终止 ...
- 私有git搭建
Git简介(目前世界上最先进的分布式版本控制系统) 那什么是版本控制系统? 你可以把一个版本控制系统(缩写VCS)理解为一个特殊的“数据库”,在需要的时候,它可以帮你完整地保存一个项目的快照.当你需要 ...
- [LC]66题 Plus One (加1)
①英文题目 Given a non-empty array of digits representing a non-negative integer, plus one to the integer ...
- [Error]使用了未经检查或不安全的操作...
编译错误注: MethodReflect.java使用了未经检查或不安全的操作.注: 有关详细信息, 请使用 -Xlint:unchecked 重新编译. 解决:在类前面加入下面一句解决 @Suppr ...
- spring源码1
1.beans核心类 1.DefaultListableBeanFactory xmlBeanFactory xmlBeanFactory继承自DefaultListableBeanFactory,D ...
- Nebula 架构剖析系列(二)图数据库的查询引擎设计
摘要 上文(存储篇)说到数据库重要的两部分为存储和计算,本篇内容为你解读图数据库 Nebula 在查询引擎 Query Engine 方面的设计实践. 在 Nebula 中,Query Engine ...
- 2018年航空概论课后作业(PS:部分答案不正确, 综合得分:83.6)
1 [单选题]航空是指载人或不载人的飞行器在地球____的航行活动. • A.高空• B.大气层内• C.宇宙• D.大气层外我的答案:B 得分: 33.3分 2 [多选题]军用飞机可分为____两大 ...
- ENS中文文档系列之一 [ ENS介绍 ]
前言 ENS中文文档是由我照ENS英文官方文档翻译而来,其中的一些内容和细节得到了ENS官方团队的指导.文档中包含 “LBB译注” 的地方是译者为了便于读者理解而进行的注释. 未来一段时间,我会在该博 ...
- java中的transient关键字详解
目录 1.何谓序列化? 2.为何要序列化? 3.序列化与transient的使用 4.java类中serialVersionUID作用 5.transient关键字小结 前言 说实话学了一段时间jav ...