hdu1251解题报告
来源:互联网 发布:淘宝怎么批量发布宝贝 编辑:程序博客网 时间:2024/05/17 22:02
题目大意:给一个单词表,再给一个前缀表,问每个前缀在单词表中出现的次数?
解题思路:前缀树,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));}
0 0
- hdu1251解题报告
- HDU1251 统计难题 解题报告--字典树
- hdu1251
- HDU1251
- hdu1251
- hdu1251
- hdu1251
- hdu1251
- hdu1251
- hdu1251
- hdu1251
- HDU1251
- hdu1251
- hdu1251
- 解题报告
- 解题报告
- 解题报告
- 解题报告
- HTML5——Web Worker使用方法
- ubuntu编译内核
- 【IOS 开发学习总结-OC-58】★UI控件——UITabBar 与UITabBarController
- 在COIDE下使用uCOS-II的一些问题
- win8 64位系统编译boost
- hdu1251解题报告
- linux下免秘钥登录
- HTTP协议和HTTPS协议详解
- 数据结构例程——从根节点到每个叶子节点的路径之逆
- libsvm中的dec_values以及分类结果评分问题
- Troubleshooting ‘DFS lock handle’ waits
- 抽象类_接口_内部类JAVA048-051
- Android4.x 如何处理Power按键
- 浅说机器学习中“迭代法”