hdu1251解题报告
2015-10-19 22:12
190 查看
题目大意:给一个单词表,再给一个前缀表,问每个前缀在单词表中出现的次数?
解题思路:前缀树,Trie,字典树,每个结点记录插入单词时经过这个结点的次数。
注意点:没说单词的最长的长度,使用静态结构的话开5000005个结点应该够,动态结构则可以忽略这个问题。
ac代码如下:
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=5000005;
const int sigma_size=26;
int ch[maxn][sigma_size];
int val[maxn];
int sz;
int idx(char c){ return c-'a'; }
void Insert(char *s)
{
int u=0;
int n=strlen(s);
for(int i=0;i<n;i++)
{
int c=idx(s[i]);
if(!ch[u][c])
{
memset(ch[sz],0,sizeof(ch[sz]));
val[sz]=1;
ch[u][c]=sz++;
}
else
{
val[ch[u][c]]++;
}
u=ch[u][c];
}
}
int query(char *s)
{
int u=0;
int n=strlen(s);
for(int i=0;i<n;i++)
{
int c=idx(s[i]);
if(!ch[u][c])
{
return 0;
}
if(i==n-1)
{
return val[ch[u][c]];
}
u=ch[u][c];
}
}
int main()
{
//freopen("1.txt","r",stdin);
char String[30];
sz=1;
memset(ch[0],0,sizeof(ch[0]));
while(gets(String)&&String[0]!='\0') Insert(String);
while(gets(String)) printf("%d\n",query(String));
}
解题思路:前缀树,Trie,字典树,每个结点记录插入单词时经过这个结点的次数。
注意点:没说单词的最长的长度,使用静态结构的话开5000005个结点应该够,动态结构则可以忽略这个问题。
ac代码如下:
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=5000005;
const int sigma_size=26;
int ch[maxn][sigma_size];
int val[maxn];
int sz;
int idx(char c){ return c-'a'; }
void Insert(char *s)
{
int u=0;
int n=strlen(s);
for(int i=0;i<n;i++)
{
int c=idx(s[i]);
if(!ch[u][c])
{
memset(ch[sz],0,sizeof(ch[sz]));
val[sz]=1;
ch[u][c]=sz++;
}
else
{
val[ch[u][c]]++;
}
u=ch[u][c];
}
}
int query(char *s)
{
int u=0;
int n=strlen(s);
for(int i=0;i<n;i++)
{
int c=idx(s[i]);
if(!ch[u][c])
{
return 0;
}
if(i==n-1)
{
return val[ch[u][c]];
}
u=ch[u][c];
}
}
int main()
{
//freopen("1.txt","r",stdin);
char String[30];
sz=1;
memset(ch[0],0,sizeof(ch[0]));
while(gets(String)&&String[0]!='\0') Insert(String);
while(gets(String)) printf("%d\n",query(String));
}
相关文章推荐
- LeetCode41——First Missing Positive
- MATLAB在数学中的应用
- F - Free DIY Tour(动态规划,搜索也行)
- 从软件工程角度回顾本科毕业论文
- iptables 配置实例
- iOS自定义相机界面
- sqllite中创建默认时间
- mongodb3.x认证
- 牛客网-剑指offer-java版本解答目录(经自测)
- libsvm中的dec_values以及分类结果评分问题
- UVA 题目11584 - Partitioning by Palindromes(DP)
- 深刻理解Linux进程间通信(IPC)
- 死锁
- poj3463&&hdu1688 次短路(dijkstra)
- Callable与Future的介绍
- 使用servlet过滤器播放amr音频
- HTTP协议和HTTPS协议详解
- android SQLite存储简单范例+详细注释(增删查改)
- Troubleshooting ‘DFS lock handle’ waits
- 初学c课程笔记整理2-->>运算符