HDU1251 裸字典树

HDU1251:http://acm.hdu.edu.cn/showproblem.php?pid=1251

初学字典树,码模板……

#include<iostream>
#include<string.h>
using namespace std;
char a[15];
struct node {
    node *nextt[26];
    int v=0;
};
node root;
void init()
{
    for (int i = 0; i < 26; i++)
    {
        root.nextt[i] = NULL;
    }
}
void creatree()
{
    int len = strlen(a);
    node *p = &root,*q;
    for (int i = 0; i < len; i++)
    {
        int id = a[i] - ‘a‘;
        if (p->nextt[id] == NULL)
        {
            q = (node*)malloc(sizeof(node));
            q->v = 1;
            for (int j = 0; j < 26; j++)
                q->nextt[j] = NULL;
            p->nextt[id] = q;
            p = p->nextt[id];
        }
        else {
            p->nextt[id]->v++;
            p = p->nextt[id];
        }
    }
}
int find()
{
    int len = strlen(a);
    node *p = &root;
    for (int i = 0; i < len; i++)
    {
        int id = a[i] - ‘a‘;
        p = p->nextt[id];
        if (p == NULL) return 0;
    }
    return p->v;
}
int main()
{
    init();
    while (gets(a) && a[0] != ‘\0‘)
        creatree();
    while (cin >> a)
    {
        cout << find() << endl;
    }
    return 0;
}
时间: 2024-10-28 10:17:58

HDU1251 裸字典树的相关文章

hdu2222ac自动机或者裸字典树

ac自动机代码 #include <cstdio> #include <iostream> #include <queue> #include <cstring> using namespace std; #define id(a) (a-'a') const int maxnode=10000*50+10; int ch[maxnode][26]; int f[maxnode]; int val[maxnode]; int sz; int insert(c

hdu1251 简单字典树

之前去省赛打酱油,遇到一题二进制相关的题目,当时都没做出.后来几个学长找规律打表,然后做:老族长说要用到字典树思想. 也应该学习学习字典树.随手拿水题,看题解,看代码,还是懂了字典树: 内存消耗真的大.. #include<stdio.h> #include<stdlib.h> #include<string.h> #define maxn 26//26个字母 struct trie { trie *next[maxn];//向下26个字母扩展 int v;//记录个数

hdu-1251(字典树)

字典树模板题. ps:数组要开大,40w左右才行,不然疯狂re 代码: #include<iostream> #include<algorithm> #include<cstdio> #include<cstring> using namespace std; int root; int tot=1; int trie[400500][30]; int cnt[400500]; void init()//最后清空,节省时间 { memset(trie,0,s

HDU1251(字典树)

#include"cstdio" #include"cstring" using namespace std; const int N=26; struct node{ int t; node* next[N]; node() { t=0; for(int i=0;i<N;i++) next[i]=NULL; } }; node* root; void insert(char *s) { node* p=root; for(int i=0;s[i];i++)

HDU 1251 裸的字典树、入门题

裸的字典树还是挺简单的. 四个基本操作建立.查找.插入.删除 建立新结点我是用的c++中 new操作.当然也可以用malloc,都方便 不过指针阿.地址阿.这其中关系什么的我貌似还不是很清楚阿. 因为刚开始我的头结点也是定义的指针.然后程序就炸了.我不清楚原因呢. 有待弄清楚. 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #includ

hdu1251 字典树or map

一道字典树的题,不过看起来用map更为简单 传送门 题意: 给出一堆字符串构成一个字典,求字典里以某字符串为前缀的字符串有几个 思路: 输入字符串时把字符串的前缀全部存进map并标记次数 查询时直接输出就可以了 AC代码: 1 #include "stdio.h" 2 #include "map" 3 #include "string" 4 #include "string.h" 5 #include "iostre

HDU1251 统计难题【字典树】

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1251 题目大意: 给你一张单词表,每个单词占一行,以空行结束.再给你几个单词前缀.那么问题来了: 统计出单词表中以所给单词前缀为前缀的单词数目. 思路: 其实就是字典树的模板应用.根据所给单词表建立一个字典树,并记录所有前缀的个数. 然后根据所给单词前缀去字典树中查找是否含有这个前缀.找到就输出该前缀的个数. AC代码: #include<iostream> #include<algori

hdu1251 统计难题 【字典树】

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

hdu--1251 统计难题(字典树水题)

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