好久没碰字典树之类的题了,搞起来有点生疏

/*
把所有母串的后缀加入字典树中
然后再扫一次所有母串的后缀,把后缀放到字典树中查询,找到第一个访问次数为1的结点返回即可
num在计数时,同一个母串的子串只能增加一次,所以用一个时间戳time数组来标记一下
*/
#include<bits/stdc++.h>
using namespace std;
#define maxn 100000
char strs[maxn][];
int n,t;
struct Trie{
int nxt[maxn*][],num[maxn*],time[maxn*];
int root,L;
int newnode(){
for(int i=;i<;i++)nxt[L][i]=-;
num[L]=,time[L]=;
return L++;
}
void init(){
L=;root=newnode();
}
void insert(char buf[]){
int len=strlen(buf);
int now=root;
for(int i=;i<len;i++){
if(nxt[now][buf[i]-'']==-)
nxt[now][buf[i]-'']=newnode();
now=nxt[now][buf[i]-''];
if(time[now]!=t)
num[now]++,time[now]=t;
}
}
int query(char buf[]){
int len=strlen(buf);
int now=root;
for(int i=;i<len;i++){
now=nxt[now][buf[i]-''];
if(num[now]==)return i;
}
return -;
}
}tr;
int main(){
int i;
cin>>n;
tr.init();
for(i=;i<=n;i++){
t=i;
cin>>strs[i];
for(int j=;j<;j++){
char tmp[]={};
strcpy(tmp,strs[i]+j);
tr.insert(tmp);
}
} for(i=;i<=n;i++){
int l=,r=,Min=;
for(int j=;j<;j++){
char buf[]={};
strcpy(buf,strs[i]+j);
int tmp=tr.query(buf);
if(tmp==-)continue;
else {
if(Min>tmp){
Min=tmp;
l=j,r=j+tmp;
}
}
}
for(int k=l;k<=r;k++)
printf("%c",strs[i][k]);
puts(""); }
}

cf861D 字典树+时间戳的更多相关文章

  1. 萌新笔记——用KMP算法与Trie字典树实现屏蔽敏感词(UTF-8编码)

    前几天写好了字典,又刚好重温了KMP算法,恰逢遇到朋友吐槽最近被和谐的词越来越多了,于是突发奇想,想要自己实现一下敏感词屏蔽. 基本敏感词的屏蔽说起来很简单,只要把字符串中的敏感词替换成"* ...

  2. [LeetCode] Implement Trie (Prefix Tree) 实现字典树(前缀树)

    Implement a trie with insert, search, and startsWith methods. Note:You may assume that all inputs ar ...

  3. 字典树+博弈 CF 455B A Lot of Games(接龙游戏)

    题目链接 题意: A和B轮流在建造一个字,每次添加一个字符,要求是给定的n个串的某一个的前缀,不能添加字符的人输掉游戏,输掉的人先手下一轮的游戏.问A先手,经过k轮游戏,最后胜利的人是谁. 思路: 很 ...

  4. 萌新笔记——C++里创建 Trie字典树(中文词典)(一)(插入、遍历)

    萌新做词典第一篇,做得不好,还请指正,谢谢大佬! 写了一个词典,用到了Trie字典树. 写这个词典的目的,一个是为了压缩一些数据,另一个是为了尝试搜索提示,就像在谷歌搜索的时候,打出某个关键字,会提示 ...

  5. 山东第一届省赛1001 Phone Number(字典树)

    Phone Number Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 We know that if a phone numb ...

  6. 字典树 - A Poet Computer

    The ACM team is working on an AI project called (Eih Eye Three) that allows computers to write poems ...

  7. trie字典树详解及应用

    原文链接    http://www.cnblogs.com/freewater/archive/2012/09/11/2680480.html Trie树详解及其应用   一.知识简介        ...

  8. HDU1671 字典树

    Phone List Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  9. *HDU1251 字典树

    统计难题 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131070/65535 K (Java/Others)Total Submi ...

随机推荐

  1. JDBC、DBCP、C3P0、jdbc-pool--链接方式?连接池?

    连接方式: java连接数据库的四种方式 - Cece_2012的专栏 - CSDN博客http://blog.csdn.net/cece_2012/article/details/7485482 J ...

  2. Spring重温(一)--Spring快速入门

    1.spring官网(https://repo.spring.io)下载依赖jar. 2.配置spring环境时还需要commons-logging相关jar. 3.打开eclise创建一个工程,并将 ...

  3. Network Architecture Search Survey

  4. 记录linux 命令

    1.du:查询文件或文件夹的磁盘使用空间 如果当前目录下文件和文件夹很多,使用不带参数du的命令,可以循环列出所有文件和文件夹所使用的空间.这对查看究竟是那个地方过大是不利的,所以得指定深入目录的层数 ...

  5. python模块之sniffio

    嗅探python用了哪个异步库 from sniffio import current_async_library import trio import asyncio async def print ...

  6. 定制化rpm包及本地yum仓库搭建

    为方便本地yum的管理,一般都是在公司局域网内搭建本地yum仓库,实现公司内部快速安装常用软件. 步骤如下: 1.搭建要实现本地yum管理的软件,测试该软件搭建成功与否: 2.定制rpm包及其相关依赖 ...

  7. JSON.stringify与JSON.parse

      JSON.stringify(value [, replacer] [, space]) 用于将 对象 --> JSON 字符串. value:对象.数组.类 replacer: 数组时:v ...

  8. 8-Images

    HTML Image Tags Tag Description <img> Defines an image <map> Defines an image-map <ar ...

  9. webservice:com.sun.xml.internal.ws.server.ServerRtException: [failed to localize]

    发布webservice发生了错误,一直没有能够解决,错误如下: Exception in thread "main" com.sun.xml.internal.ws.server ...

  10. datatables日常使用集合

    datatables CDN链接地址: <link rel="stylesheet" type="text/css" href="https:/ ...