HDU ACM 1251字典树(Trie)

简单的字典树题,首先简历字典树,在查找。

#include<iostream>
using namespace std;

struct Tri
{
	int v;
	Tri* child[26];
} root;

void Init()
{
	root.v=0;
	for(int i=0;i<26;i++)
	{
		root.child[i]=NULL;
	}
}

void CreateDic(char* str)
{
	Tri* p;
	int j;

	p=&root;
	while(*str!=NULL)
	{
		if(p->child[*str-'a']==NULL)
		{
			p->child[*str-'a']=(Tri*)new Tri;
			p->child[*str-'a']->v=1;
			for(j=0;j<26;j++)
				p->child[*str-'a']->child[j]=NULL;
		}
		else
			p->child[*str-'a']->v++;

		p=p->child[*str-'a'];
		str++;
	}
}

int Find(char* str)
{
	Tri* p=&root;

	while(*str!=NULL)
	{
		if(p->child[*str-'a']==NULL)
			return 0;
		p=p->child[*str-'a'];
		str++;
	}
	return p->v;
}

int main()
{
	char a[100];
	Init();

	while(gets(a) && a[0]!='\0')
	{
		CreateDic(a);
	}

	while(gets(a))
	{
		cout<<Find(a)<<endl;
	}
    return 0;
}
时间: 2024-11-06 19:18:31

HDU ACM 1251字典树(Trie)的相关文章

HDU 1251 字典树入门

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

字典树 Trie (HDU 1671)

Problem Description Given a list of phone numbers, determine if it is consistent in the sense that no number is the prefix of another. Let's say the phone catalogue listed these numbers: 1. Emergency 911 2. Alice 97 625 999 3. Bob 91 12 54 26 In this

HDU 1247 Hat&#39;s words(字典树Trie)

解题思路: 判断给出的单词是否恰好由另外两个单词组成,用栈保存每个子字符串的节点,从这个节点出发判断剩下的字符串是否在字典树中即可. #include <iostream> #include <cstdlib> #include <cstdio> #include <cstring> #include <algorithm> #include <vector> #include <map> #include <sta

hdu 2846 Repository 字典树

// hdu 2846 Repository 字典树 // // 题目大意: // // 有n个字符串,m个待询问的字符串,问这些字符串里面以该询问的 // 字符串为子串的字符串有多少个 // // 解题思路: // // 字典树,将字符串的所有子串插入到字典树中,并设立一个No.标识 // 以免重计数.最后查询就好了 // // 感悟: // // 这题的数据量有点大,虽然p是10000,但是长度是20,单个字符串的 // 最大子串数粗略的估计是 20 * 20 ,所以开的空间也要比较大.开始

[POJ] #1003# 487-3279 : 桶排序/字典树(Trie树)/快速排序

一. 题目 487-3279 Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 274040   Accepted: 48891 Description Businesses like to have memorable telephone numbers. One way to make a telephone number memorable is to have it spell a memorable word or

字典树Trie

字典树Trie Trie,又称字典树,前缀树(prefix tree),是一种树形结构,用于保存大量的字符串. 它的优点是:利用字符串的公共前缀来节约存储空间.查找.插入复杂度为O(n),n为字符串长度. 它有3个基本性质: 1. 根节点不包含字符,除根节点外每一个节点都只包含一个字符. 2. 从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串. 3. 每个节点的所有子节点包含的字符都不相同. 假设有abc,abcd,abd, b, bcd,efg,hii这7个单词,可构建字典树

HDU 1247 简单字典树

Hat’s Words Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 7359    Accepted Submission(s): 2661 Problem Description A hat’s word is a word in the dictionary that is the concatenation of exactly

hdoj 1251 字典树

代码: #include <stdio.h>#define  MAX    26 typedef struct TrieNode{     int nCount;      struct TrieNode *next[MAX];}TrieNode;TrieNode Memory[1000000];int allocp = 0; TrieNode *CreateTrieNode(){    int i;    TrieNode *p;    p = &Memory[allocp++]; 

HDU 2846 Repository(字典树,标记)

题目 字典树,注意初始化的位置~!!位置放错,永远也到不了终点了org.... 我是用数组模拟的字典树,这就要注意内存开多少了,,要开的不大不小刚刚好真的不容易啊.... 我用了val来标记是否是同一个串分解而来的,保存的是串的编号 num记录数目. //string &replace(iterator first0, iterator last0,const_iterator first, const_iterator last); //把[first0,last0)之间的部分替换成[firs