字典树练习(一)hihocoder 1014(求相同前缀的数目)

题目链接:

http://hihocoder.com/problemset/problem/1014

题意:

给定n个单词,然后我们构成一个字典树,然后再给你m个串,求有多少个单词是以这个串为前缀的。

代码如下:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;

const int maxn = 100010;

const int max_size = 30;

int id(char c){
    return c-'a';
}

struct Trie{
    Trie *ch[max_size];
    int num;
    Trie(){
        num = 0;
        for(int i=0;i<max_size;i++)
            ch[i]=NULL;
    }
}*root;

void insert_str(char *s){
    Trie *p = root;
    p->num++;
    for(int i=0; p&&s[i] ; i++){
        int u = id(s[i]);
        if(p->ch[u]==NULL)
            p->ch[u] = new Trie;
        p=p->ch[u];
        p->num++;
    }
}

int find_str(char *s){
    Trie *p = root;
    for(int i=0;p&&s[i];i++){
        int u = id(s[i]);
        if(p->ch[u]==NULL) return 0;
        p=p->ch[u];
    }
    return p->num;
}

int main()
{
  char s[12];
  int n, m;
  while(~scanf("%d", &n))
  {
    root = new Trie;
    while(n--){
      scanf("%s", s);
      insert_str(s);
    }
    scanf("%d", &m);
    while(m--){
      scanf("%s", s);
      printf("%d\n", find_str(s));
    }
  }
  return 0;
}
时间: 2024-10-10 01:27:04

字典树练习(一)hihocoder 1014(求相同前缀的数目)的相关文章

字符串hash与字典树

title: 字符串hash与字典树 date: 2018-08-01 22:05:29 tags: acm 算法 字符串 概述 这篇主要是关于字符串里的 字符串hash 和 字符串字典树,,两个都是简单的套模板的东西,,,理解基本思想就行了,,,对了,,还有一个字典树的的变形--01字典树: 字符串hash 如何求一个字符串的hash值 字符串hash的作用就是将 字符串有效的转化为一个整数 ,,这个转化过程利用的是一个 hash函数 例如,,我们选hash函数为 \(hash[i]=(has

1123: 统计难题 (字典树)

1123: 统计难题 时间限制: 1 Sec  内存限制: 128 MB 提交: 4  解决: 4 [提交][状态][讨论版] 题目描述 Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单词数量(单词本身也是自己的前缀). 输入 输入数据的第一部分是一张单词表,每行一个单词,单词的长度不超过10,它们代表的是老师交给Ignatius统计的单词,一个空行代表单词表的结束.第二部分是一连串的提问,每行一个提问,每个

hihoCoder 1014 Trie树(字典树入门)

题目链接:http://hihocoder.com/problemset/problem/1014(此题附入门讲解) 题面: #1014 : Trie树 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在编程的学习道路上一同前进. 这一天,他们遇到了一本词典,于是小Hi就向小Ho提出了那个经典的问题:"小Ho,你能不能对于每一个我给出的字符串,都在这个词典里面找到以这个字符

Hihocoder #1014 : Trie树 (字典数树统计前缀的出现次数 *【模板】 基于指针结构体实现 )

#1014 : Trie树 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在编程的学习道路上一同前进. 这一天,他们遇到了一本词典,于是小Hi就向小Ho提出了那个经典的问题:“小Ho,你能不能对于每一个我给出的字符串,都在这个词典里面找到以这个字符串开头的所有单词呢?” 身经百战的小Ho答道:“怎么会不能呢!你每给我一个字符串,我就依次遍历词典里的所有单词,检查你给我的字

hihoCoder 1014 Trie树(基础字典树)

题意  中文 最基础的字典树应用噢噢噢噢 #include<cstdio> #include<cstring> using namespace std; struct trie { trie *chi[26]; int num; trie() { num = 0; for(int i = 0; i < 26; ++i) chi[i] = NULL; } }*root; void insertTrie(char s[]) { trie *p = root; p->num+

hihocoder 1014 Trie树 字典树

题目链接: hihocoder 1014 代码: #include<iostream> #include<cstdio> #include<cstring> using namespace std; struct node{ int ans; node* next[26]; node() { ans=1; for(int ii=0;ii<26;ii++) next[ii]=NULL; } }*Trie; int trie_find(char* str) { nod

hihoCoder 1014trie树(字典树)

hihoCoder 1014 题目提示已经很清楚了~ 贴代码…… #include <iostream> #include <cstdio> #include <cstring> using namespace std; const int MAXN = 100000 + 10; const int alNum = 26; struct Node{ int cnt; int next[alNum]; void init(){ memset(next,-1,sizeof(

hihoCoder 1014 Trie树

#1014 : Trie树 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在编程的学习道路上一同前进. 这一天,他们遇到了一本词典,于是小Hi就向小Ho提出了那个经典的问题:“小Ho,你能不能对于每一个我给出的字符串,都在这个词典里面找到以这个字符串开头的所有单词呢?” 身经百战的小Ho答道:“怎么会不能呢!你每给我一个字符串,我就依次遍历词典里的所有单词,检查你给我的字

hiho #1014 : Trie树 (字典树的建立和查找)

#1014 : Trie树 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在编程的学习道路上一同前进. 这一天,他们遇到了一本词典,于是小Hi就向小Ho提出了那个经典的问题:"小Ho,你能不能对于每一个我给出的字符串,都在这个词典里面找到以这个字符串开头的所有单词呢?" 身经百战的小Ho答道:"怎么会不能呢!你每给我一个字符串,我就依次遍历词典里的所有