HDU 4287 Intelligent IME(字典树)
2024-10-10 22:40:33
在我没用hash之前,一直TLE,字符串处理时间过长,用了hash之后一直CE,(请看下图)我自从经历我的字典树G++MLE,C++AC以后,一直天真的用C++,后来的CE就是因为这个,G++才支持这个hash...
#include<cstdio>
#include<iostream>
#include<string.h>
int hash[];
struct TrieNode
{
int no;
TrieNode *next[];
} node[];
TrieNode *root = &node[];
int cnt,result[];
char word[],s[];
void init()
{
hash['a']=hash['b']=hash['c']=;
hash['d']=hash['e']=hash['f']=;
hash['g']=hash['h']=hash['i']=;
hash['j']=hash['k']=hash['l']=;
hash['m']=hash['n']=hash['o']=;
hash['p']=hash['q']=hash['r']=hash['s']=;
hash['t']=hash['u']=hash['v']=;
hash['w']=hash['x']=hash['y']=hash['z']=;
}
void initRoot()
{
int i;
for(i=; i<; i++)
{
root->next[i]=NULL;
}
}
void insert(char str[],int num)
{
TrieNode *p = root;
int len=strlen(str),i,j;
for(i=; i<len; i++)
{
if(p->next[str[i]-'']==NULL)
{
p->next[str[i]-'']=&node[cnt];
for(j=; j<; j++)node[cnt].next[j]=NULL;
node[cnt].no=-;
cnt++;
}
p=p->next[str[i]-''];
}
p->no=num;
}
/** 查询一个字母字符串对应的数字串 */
void query(char str[])
{
int len=strlen(str),i;
TrieNode *p=root;
for(i=; i<len; i++)
{
p=p->next[hash[str[i]]];
if(p==NULL)break;
}
if(p==NULL)return;
else
{
if(p->no!=-)result[p->no]++;
}
}
int main()
{
int t,m,n,i;
scanf("%d",&t);
init();
while(t--)
{
cnt=;
initRoot();
memset(result,,sizeof(result));
scanf("%d%d",&n,&m);
for(i=; i<n; i++)
{
scanf("%s",word);
insert(word,i);
}
for(i=; i<m; i++)
{
scanf("%s",s);
query(s);
}
for(i=; i<n; i++)
{
printf("%d\n",result[i]);
}
}
return ;
}
最新文章
- Angularjs 的 ngInfiniteScroll 的使用方法
- C++之再续前缘(二)——类和对象(上)
- 9.22 JS脚本语言DOM
- 【BZOJ1051】1051: [HAOI2006]受欢迎的牛 tarjan求强连通分量+缩点
- ACM之Java速成(1)
- [python] No module named _sysconfigdata_nd
- Eclipse(PHP、JAVA)的快捷键大全
- winow.open打开窗口被拦截的解决方法
- 关于C#中readonly
- bzoj4828 [Hnoi2017]大佬
- 老男孩Python全栈开发(92天全)视频教程 自学笔记05
- Qualcomm平台camera调试移植入门
- 为什么面试你要25K,HR只给你20K?
- Cookie丢失的原因
- PHP中的自动加载
- js常见知识点1.ajax相关
- scrollIntoView将指定元素定位到浏览器顶部,底部,中间
- CSS3小清新下拉菜单 简易大方
- 分享一个自定义的 console 类,让你不再纠结JS中的调试代码的兼容
- C# 图片和64位编码的转换