题目链接:

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!的更多相关文章

  1. [tire+最短路]Bless You Autocorrect!

    [tire+最短路]Bless You Autocorrect! Typing on phones can be tedious. It is easy to make typing mistakes ...

  2. Urozero Autumn 2016. NCPC 2016

    A. Artwork 倒过来并查集维护即可. #include<cstdio> #include<algorithm> using namespace std; const i ...

  3. Nordic Collegiate Programming Contest (NCPC) 2016

    A Artwork B Bless You Autocorrect! C Card Hand Sorting D Daydreaming Stockbroker 贪心,低买高卖,不要爆int. #in ...

  4. ubuntu bless 16字节每行

    打开Preferences配置 输入路径:/usr/share/bless/bless-16-bytes-per-row.layout 或者使用以下配置 cat /home/scue/.config/ ...

  5. autocapticalize和autocorrect

    首字母自动大写autocapitalize 在 iOS 中,用户可以手动开启「首字母自动大写」功能,这样输入英文的时候,首字母便会自动大写.但是,有些时候并不希望一直是首字母大写的.比如用户名这个字段 ...

  6. perl 对象 通过bless实现

    对象只是一种特殊的引用,它知道自己是和哪个类关联在一起的,而构造器知道如何创建那种关联关系. 这些构造器是通过使用bless操作符,将一个普通的引用物转换成一个对象实现的,

  7. perl 对象 bless 引用

    [root@dr-mysql01 ~]# cat aa.pl use LWP::UserAgent; use Data::Dumper; my $ua = LWP::UserAgent->new ...

  8. 【Perl学习笔记】2. perl中的bless理解

    bless有两个参数:对象的引用.类的名称. 类的名称是一个字符串,代表了类的类型信息,这是理解bless的关键. 所谓bless就是把 类型信息 赋予 实例变量. 程序包括5个文件:person.p ...

  9. BLESS学习笔记

    BLESS全称:Bloom-filter-based Error Correction Solution for High-throughput Sequencing Reads,即基于布隆过滤器的高 ...

随机推荐

  1. 创建基于OData的Web API - Knowledge Builder API, Part IV: Write Controller

    基于上一篇<创建基于OData的Web API - Knowledge Builder API, Part III:Write Model and Controller>,新创建的ODat ...

  2. etcd-operator快速入门完全教程

    Operator是指一类基于Kubernetes自定义资源对象(CRD)和控制器(Controller)的云原生拓展服务,其中CRD定义了每个operator所创建和管理的自定义资源对象,Contro ...

  3. 使用Spring安全表达式控制系统功能访问权限

    一.SPEL表达式权限控制 从spring security 3.0开始已经可以使用spring Expression表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限.Spring ...

  4. 从最近面试聊聊我所感受的.net天花板

    #0 前言 入职新公司没多久,闲来无事在博客园闲逛,看到园友分享的面试经历,正好自己这段时间面试找工作,也挺多感想的,干脆趁这个机会总结整理一下.博主13年开始实习,14年毕业.到现在也工作五六年了. ...

  5. react-router重定向

    ① ②通过this.props重定向

  6. windows 10安装和配置caffe教程 | Install and Configure Caffe on windows 10

    本文首发于个人博客https://kezunlin.me/post/1739694c/,欢迎阅读! Install and Configure Caffe on windows 10 Part 1: ...

  7. 【Spring】简述@Configuration配置类注册BeanDefinition到Spring容器的过程

    概述 本文以SpringBoot应用为基础,尝试分析基于注解@Configuration的配置类是如何向Spring容器注册BeanDefinition的过程 其中主要分析了 Configuratio ...

  8. Win 使用终端创建mysql数据库及使用(5)

    删除你创建过的数据库newsql里面的所有表 这里必须安装了mysql,并且知道用户名密码IP地址.因为我用的window,所以只介绍Win使用cmd创建的方式 首先windown+R 出现窗口输入c ...

  9. Asp.Net Core下使用swagger生成api文档

    目录 一.前期准备 二.配置Swagger 三.参考 .Net Core中有两个集成NSwag的包,分别为Swashbuckle和NSwag.两者的配置大同小异.这里以NSwag为例. 一.前期准备 ...

  10. python_Django

    1.Python用具 - pip    1.作用:        Python的软件包管理器,有一些python包被集成到了pip中.只要被集成到pip中的包,都允许通过pip直接安装    2.安装 ...