博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
统计难题 HDU - 1251(字典树)
阅读量:4558 次
发布时间:2019-06-08

本文共 1337 字,大约阅读时间需要 4 分钟。

统计难题 HDU - 1251

题目链接:

Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单词数量(单词本身也是自己的前缀).
Input输入数据的第一部分是一张单词表,每行一个单词,单词的长度不超过10,它们代表的是老师交给Ignatius统计的单词,一个空行代表单词表的结束.第二部分是一连串的提问,每行一个提问,每个提问都是一个字符串.
注意:本题只有一组测试数据,处理到文件结束.
Output对于每个提问,给出以该字符串为前缀的单词的数量.
Sample Input
bananabandbeeabsoluteacmbabbandabc
Sample Output
2310 思路:字典树模板
// // Created by HJYL on 2019/8/17.//#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;typedef long long ll;const int maxn=1e6+10;char str[maxn];struct trie{ trie* next[26]; int sum; trie(){ for(int i=0;i<26;i++) { next[i]=NULL; } sum=0; }}root;void insert(char* s){ trie* p=&root; for(int i=0;s[i];i++) { if(p->next[s[i]-'a']==NULL) { p->next[s[i]-'a']=new trie; } p=p->next[s[i]-'a']; p->sum++; }}int find(char* s){ trie* p=&root; for(int i=0;s[i];i++) { if(p->next[s[i]-'a']==NULL) return 0; else p=p->next[s[i]-'a']; } return p->sum;}int main(){ //freopen("C:\\Users\\asus567767\\CLionProjects\\untitled\\text","r",stdin); while(gets(str)&&str[0]!='\0') { insert(str); } while(scanf("%s",str)==1) { printf("%d\n",find(str)); } return 0;}

 

 

转载于:https://www.cnblogs.com/Vampire6/p/11370882.html

你可能感兴趣的文章
Java范例集锦(二)
查看>>
C语言变量和常量
查看>>
LInuxDay8——shell脚本编程基础
查看>>
topcoder 673
查看>>
Java中一些常用的类,包,接口
查看>>
下载特定区域内街景照片数据 | Download Street View Photos within Selected Region
查看>>
StarUML 破解方法
查看>>
C语言结构体
查看>>
[转]Tribon船体生产设计应用
查看>>
easy ui datagrid 让某行复选框不能选中
查看>>
第六周作业
查看>>
关于adb端口被占用的解决办法
查看>>
php 部分内置函数的使用
查看>>
字符串处理技巧
查看>>
归档及压缩命令
查看>>
Mybatis步骤
查看>>
WPF自定义控件之扩展原生控件
查看>>
《区块链100问》笔记整理——42~49问
查看>>
使用Jquery+EasyUI 进行框架项目开发案例讲解之二---用户管理源码分享
查看>>
深入理解计算机系统(1.4)---并发与并行、浅谈抽象
查看>>