【hdoj】1251 统计难题 【数据结构-Trie树裸题】

传送门:统计难题

题意:

字典树裸题。

分析

字典树板子,但是这题需要注意一点。

关于字典树的只是可以参考hihocoder hiho一下 第二周

用G++提交会爆内存(Memory Limit Exceeded),用c++提交可以AC。

G++ 与 C++提交的区别

参考:OJ中的语言选项里G++ 与 C++的区别

C++是一门计算机编程语言,而G++则是C++的编译器。

选择C++意味着你将使用C++最标准的编译方式,也就是ANSI C++编译。

选择G++则意味这你使用GNU项目中适用人群最多的编译器(其实也就是我们熟悉的Code::Blocks 自带的编译器)。

类似的还有选择C和GCC,前者是标准的C编译器,后者则是用GCC来编译。

My AC Code

#include <iostream>
#include<cstdlib>
#include<cstring>

#define rep(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
const int maxn=26;

struct TrieNode
{
    // 当前结点前缀的数量
    int prefix;
    TrieNode* Next[maxn];
};

typedef TrieNode Trie;

// 根不代表任何字母
void insert(Trie *root,char *s)
{
    Trie*  p=root;
    while(*s!=‘\0‘)
    {
        if(p->Next[*s-‘a‘]==NULL)
        {
            Trie* temp=new Trie();
            for(int i=0;i<maxn;i++)
            {
                temp->Next[i]=NULL;
            }
            temp->prefix=1;
            p->Next[*s-‘a‘]=temp;
            p=p->Next[*s-‘a‘];
        }
        else
        {
            p=p->Next[*s-‘a‘];
            p->prefix++;
        }
        s++;
    }
}

int count(Trie *root,char *pre)
{
    Trie* p=root;
    while(*pre!=‘\0‘)
    {
        if(p->Next[*pre-‘a‘]==NULL)
            return 0;
        else
        {
            p=p->Next[*pre-‘a‘];
            pre++;
        }
    }
    return p->prefix;
}

void del(Trie *root)
{
    for(int i=0;i<maxn;i++)
    {
        if(root->Next[i]!=NULL)
            del(root->Next[i]);
    }
    free(root);
}

int main()
{
    char s[16];
    Trie *root=new Trie();
    for(int i=0;i<maxn;i++)
        root->Next[i]=NULL;
    root->prefix=0;
    while(1)
    {
        gets(s);
        if(strcmp(s,"")==0)
        {
            break;
        }
        insert(root,s);
    }
    while(gets(s))
    {
        printf("%d\n",count(root,s));
    }
    del(root);
    return 0;
}

原文地址:https://www.cnblogs.com/shengwang/p/9783552.html

时间: 2024-07-29 19:51:20

【hdoj】1251 统计难题 【数据结构-Trie树裸题】的相关文章

HDU 1251 统计难题(字典树 裸题 链表做法)

Problem Description Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单词数量(单词本身也是自己的前缀). Input 输入数据的第一部分是一张单词表,每行一个单词,单词的长度不超过10,它们代表的是老师交给Ignatius统计的单词,一个空行代表单词表的结束.第二部分是一连串的提问,每行一个提问,每个提问都是一个字符串. 注意:本题只有一组测试数据,处理到文件结束. Output 对于每个提

HDU 1251 统计难题(字典树模板题)

http://acm.hdu.edu.cn/showproblem.php?pid=1251 题意:给出一些单词,然后有多次询问,每次输出以该单词为前缀的单词的数量. 思路: 字典树入门题. 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 using namespace std; 5 const int maxn = 1000005; 6 7 int num = 0; 8 9 struct Tr

HDU 1251 统计难题(字典树模板题 || map运用)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1251 Problem Description Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单词数量(单词本身也是自己的前缀). Input 输入数据的第一部分是一张单词表,每行一个单词,单词的长度不超过10,它们代表的是老师交给Ignatius统计的单词,一个空行代表单词表的结束.第二部分是一连串的提问,每行一

[ACM] hdu 1251 统计难题 (字典树)

统计难题 Problem Description Ignatius近期遇到一个难题,老师交给他非常多单词(仅仅有小写字母组成,不会有反复的单词出现),如今老师要他统计出以某个字符串为前缀的单词数量(单词本身也是自己的前缀). Input 输入数据的第一部分是一张单词表,每行一个单词,单词的长度不超过10,它们代表的是老师交给Ignatius统计的单词,一个空行代表单词表的结束.第二部分是一连串的提问,每行一个提问,每一个提问都是一个字符串. 注意:本题仅仅有一组測试数据,处理到文件结束. Out

HDU1251 统计难题 【trie树】

统计难题 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131070/65535 K (Java/Others) Total Submission(s): 17302    Accepted Submission(s): 7464 Problem Description Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单词数量(单词本身也是自己的

HDU 1251 统计难题(Trie模版题)

统计难题 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131070/65535 K (Java/Others) Total Submission(s): 34909    Accepted Submission(s): 13109 Problem Description Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单词数量(单词本身也是自己

HDU 1251 统计难题 (Trie)

统计难题 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131070/65535 K (Java/Others) Total Submission(s): 22182    Accepted Submission(s): 9391 Problem Description Ignatius近期遇到一个难题,老师交给他非常多单词(仅仅有小写字母组成,不会有反复的单词出现),如今老师要他统计出以某个字符串为前缀的单词数量(单词本身也是自

HDU 1251 统计难题(字典树入门模板题 很重要)

统计难题 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131070/65535 K (Java/Others)Total Submission(s): 56382    Accepted Submission(s): 19709 Problem Description Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单词数量(单词本身也是自己的

HDU 1251 统计难题 (字典树)(查询是否为前缀)

统计难题 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131070/65535 K (Java/Others)Total Submission(s): 37626    Accepted Submission(s): 13858 Problem Description Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单词数量(单词本身也是自己的