Codeforces 861D - Polycarp's phone book 【Trie树】
<题目链接>
题目大意:
输入7e4个长度为9的字符串,每个字符串中只出现0~9这几种数字,现在需要你输出每个母串中最短的特有子串。
解题分析:
利用Trie树进行公共子串的判定,因为Trie树的特性是对节点的前缀字符串进行操作,所以为了转换成对母串中任意区间的字符串进行操作,我们对母串中的所有后缀字符串建树。下面用了一个比较优秀的Trie树模板。
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std; const int N = 7e4+;
const int INF = 1e6;
char buf[N][];
int n,cur;
struct Trie{
int nxt[N*][],num[N*],time[N*];
int root,pos;
int newnode(){
for(int i=;i<;i++)nxt[pos][i]=-;
num[pos]=,time[pos]=;
return pos++;
}
void init(){
pos=;root=newnode();
}
void insert(char str[]){
int len=strlen(str);
int now=root;
for(int i=;i<len;i++){
int to=str[i]-'';
if(nxt[now][to]==-)
nxt[now][to]=newnode();
now=nxt[now][to];
if(time[now]!=cur) //建立时间戳的意义是,避免相同母串中不同位置中的相同子串产生重复标记
num[now]++,time[now]=cur; //num[now]记录下含有这个子串的母串数量
}
}
int query(char str[]){
int len=strlen(str);
int now=root;
for(int i=;i<len;i++){
now=nxt[now][str[i]-''];
if(num[now]==)return i;
}
return -;
}
}trie; int main(){
ios::sync_with_stdio(false);cin.tie();cout.tie();
cin>>n;
trie.init();
for(int i=;i<=n;i++){
cin>>buf[i];
cur=i;
for(int j=;j<;j++){
trie.insert(buf[i]+j); //用每个母串的所有后缀建Trie树,然后利用Trie树对前缀字符串进行操作的特性,达到对母串字符区间的操作
}
}
for(int i=;i<=n;i++){
int le=,ri=,mn=INF;
for(int j=;j<;j++){
int tmp=trie.query(buf[i]+j);
if(tmp!=- && mn>tmp){ //找到每个母串中符合条件的最短子串
mn=tmp;le=j,ri=j+tmp;
}
}
for(int j=le;j<=ri;j++)cout<<buf[i][j];
puts("");
}
}
2019-02-01
Codeforces 861D - Polycarp's phone book 【Trie树】的更多相关文章
- Codeforces 615C Running Track(DP + Trie树)
题目大概说给两个串,问最少要用多少个第一个串的子串(可以翻转)拼成第二个串. UVa1401,一个道理..dp[i]表示前缀i拼接成功所需最少的子串,利用第一个串所有子串建立的Trie树往前枚举转移. ...
- Codeforces 633C Spy Syndrome 2 【Trie树】+【DFS】
<题目链接> 题目大意:给定一个只有小写字母组成的目标串和m个模式串(里面可能有大写字母),记目标串反过来后的串为S,让你从m个模式串中选出若干个组成S串(不区分大小写).输出任意一种方案 ...
- Codeforces 514C Watto and Mechanism 【Trie树】+【DFS】
<题目链接> 题目大意:输入n个单词构成单词库,然后进行m次查询,每次查询输入一个单词(注意这些单词只由a,b,c构成),问该单词库中是否存在与当前查询的单词有且仅有一个字符不同的单词. ...
- Codeforces 861D - Polycarp's phone book
861D - Polycarp's phone book 思路:用map做的话,只能出现一次循环,否则会超时. 代码: #include<bits/stdc++.h> using name ...
- codeforces 706D D. Vasiliy's Multiset(trie树)
题目链接: D. Vasiliy's Multiset time limit per test 4 seconds memory limit per test 256 megabytes input ...
- trie树 Codeforces Round #367 D Vasiliy's Multiset
// trie树 Codeforces Round #367 D Vasiliy's Multiset // 题意:给一个集合,初始有0,+表示添加元素,-去除元素,?询问集合里面与x异或最大的值 / ...
- Codeforces 633C Spy Syndrome 2 | Trie树裸题
Codeforces 633C Spy Syndrome 2 | Trie树裸题 一个由许多空格隔开的单词组成的字符串,进行了以下操作:把所有字符变成小写,把每个单词颠倒过来,然后去掉单词间的空格.已 ...
- Codeforces 514 D R2D2 and Droid Army(Trie树)
题目链接 大意是判断所给字符串组中是否存在与查询串仅一字符之差的字符串. 关于字符串查询的题,可以用字典树(Trie树)来解,第一次接触,做个小记.在查询时按题目要求进行查询. 代码: #define ...
- Codeforces Round #333 (Div. 1) D. Acyclic Organic Compounds trie树合并
D. Acyclic Organic Compounds You are given a tree T with n vertices (numbered 1 through n) and a l ...
随机推荐
- Markdown 简介及基础语法
一.Markdown 简介 Markdown是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式. 二.Markdown 基础语法 1. Markdown ...
- Confluence 6 SQL Server 问题解决
如果你收到了下面的错误信息,检查你给出的 confluenceuser 用户具有所有需要的数据库权限,当你使用 localhost 进行连接的时候. Could not successfully te ...
- Confluence 6 配置站点主页面
主面板(dashboard)是你站点的默认主页,但是你也可以选择使用一个空间的主页为网站访问的首页面. 针对你的 Confluence 站点主要是为用户进行阅读而不是创建内容的话,这样的配置就显得非 ...
- Confluence 6 影响语言的其他设置
一个独立的用户可以在 Confluence 中选择应用到界面文字和消息中的语言.请注意,支持的语言类型基于在 Confluence 中安装的语言包. 你登录使用 Confluence 回话的语言基于下 ...
- Django框架之Form组件
一.初探Form组件 在介绍Form组件之前,让大家先看看它强大的功能吧!Go... 下面我们来看看代码吧! 1.创建Form类 from django.forms import Form from ...
- nmap 扫描信息收集
1.端口镜像 port Mirroring 功能通过在交换机上或者路由器上,将一个或者多个源端口的数据流量妆发大奥某一个指定的端口来实现对网络的监听,指定端口成为镜像端口或目的端口. 2.ARP攻击捕 ...
- 极光推送>>java SDK服务端集成后台项目(使用详解)
PS:如果你是第一次用推送,那就直接按照我的步骤来,再去看官方文档,这样,更容易能理解操作流程.还有——-请耐心看 极光文档(java SDK)请参考 [ 极光文档 ] 步骤一: 首先,你必须在 [极 ...
- Appium 常用方法总结 (python 版)
1.app后台运行 driver.background_app(5) 2.锁屏 driver.lock(5) 3.隐藏键盘 driver.hide_keyboard() 4.启动一个app或者在当前a ...
- inline namespace
无意中看到C++11中的新特性inline namespace, 先附上官方的解释 Inline namespace The inline namespace mechanism is intende ...
- ActiveMQ使用的设计模式
注:接收不需要连接池,而发送需要连接池,是因为,接收在启动项目时就要注册监听,数目是固定的,而发送则会随着时间数目不断在变动,需要连接池,性能更优. 重点代码: private static void ...