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,即基于布隆过滤器的高 ...
随机推荐
- Jenkins集群下的pipeline实战
关于Jenkins集群 在<快速搭建Jenkins集群>一文中,我们借助docker快速搭建了Jenkins集群,今天就在这个集群环境中创建pipeline任务,体验Jenkins集群下的 ...
- ASP.NET Core 1.0: Using Entity Framework Core
伴随着ASP.NET Core 1.0发布的还有Entity Framework Core 1.0; 官方文档链接:https://docs.efproject.net/en/latest/platf ...
- 设计模式(Java语言)- 简单工厂模式
简单工厂模式有称为静态工厂模式,属于设计模式中的创建型模式.简单工厂模式通过对外提供一个静态方法来统一为类创建实例.简单工厂模式的目的是实现类与类之间解耦,其次是客户端不需要知道这个对象是如何被穿创建 ...
- opencv 4 图像处理(漫水填充,图像金字塔与图片尺寸缩放,阈(yu)值化)
漫水填充 实现漫水填充算法:floodFill函数 简单调用范例 #include <opencv2/opencv.hpp> #include <opencv2/imgproc/im ...
- centos7 防火墙屏蔽IP
1.屏蔽指定IP:124.115.0.199 iptables -I INPUT -s 124.115.0.199 -j DROP 2.屏蔽IP段: iptables -I INPUT -s 61.3 ...
- SQL Server Management Studio 安装流程
数据库的操作需要使用SQL Server Management Studio,不过也可以使用其他的: 下面是安装操作的步骤:如果你下载的压缩包,你需要先解压到一个文件夹里,然后双击setup.exe, ...
- SpringBoot学习(六)—— springboot快速整合RabbitMQ
目录 Rabbit MQ消息队列 简介 Rabbit MQ工作模式 交换机模式 引入RabbitMQ队列 代码实战 Rabbit MQ消息队列 @ 简介 优点 erlang开发,并发能力强. 社区活跃 ...
- Java方法之定义形式及可变参数
目录 Java方法之定义形式及可变参数 方法调用 使用static修饰的方法 没有static修饰的方法 方法的定义格式 无参无返 无参有返 有参无返 有参有返 形参个数可变的方法 采用数组形参来定义 ...
- golang实现rabbitmq消息队列失败尝试
在工作中发现,有些时候消息因为某些原因在消费一次后,如果消息失败,这时候不ack,消息就回一直重回队列首部,造成消息拥堵. 如是有了如下思路: 消息进入队列前,header默认有参数 retry_nu ...
- python 2.x 中print >> sys.out ,print 与sys.out.write()的关系
print 会调用 sys.stdout 的 write 方法 以下两行在事实上等价: sys.stdout.write('hello,python'+'\n') print 'hello,pytho ...