Repository HDU - 2846 字典树
Posted ttttttttrx
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Repository HDU - 2846 字典树相关的知识,希望对你有一定的参考价值。
题意:给出很多很多很多很多个 单词 类似搜索引擎一下 输入一个单词 判断有一个字符串包含这个单词
思路:字典树变体,把每个单词的后缀都扔字典树里面,这里要注意dd是一个单词 但是把d 和dd都放字典树
拿d匹配这一个单词会匹配两次 所以要开个数组记录一下上一个使该位置数量加一的字符串 如果该字符串不是同一个
那就可以加加了
TLE:还是数组大小的问题 字典树有毒!因为一个字符串可以拆成很多个后缀所以必须开大,开大了就过了。。。
1 #include<bits/stdc++.h> 2 using namespace std; 3 const int maxn=500010; 4 struct Trie{ 5 int ch[maxn][27]; 6 int num[maxn]; 7 int lastnum[maxn]; 8 int size=1; 9 void init(){ 10 memset(ch,0,sizeof(ch)); 11 memset(num,0,sizeof(num)); 12 memset(lastnum,0,sizeof(lastnum)); 13 size=1; 14 } 15 void insert(char*s,int ok){ 16 int i=0,rc=0; 17 for(;s[i]!=‘