hdu1251+字典树常用模板】的更多相关文章

这里只简单给出几个常用的字典树的模板,要看具体介绍的请看:传送门 Problem Description Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单词数量(单词本身也是自己的前缀).   Input 输入数据的第一部分是一张单词表,每行一个单词,单词的长度不超过10,它们代表的是老师交给Ignatius统计的单词,一个空行代表单词表的结束.第二部分是一连串的提问,每行一个提问,每个提问都是一个字符串.…
//字典树模板题.题意:给一个库,每次查询,求以之为前缀的单词数量. #include<iostream> #include<string> #include<vector> #include<cstdio> #include<cstring> using namespace std; int tree[500000][27]; int w[500000]; //记录结点属性. int numv=0; // 全局变量,记录顶点编号 int n;…
统计难题 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131070/65535 K (Java/Others)Total Submission(s): 35639    Accepted Submission(s): 13322 Problem Description Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单词数量(单词本身也是自己的…
统计难题 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最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单词数量(单词本身也是自己的…
一道字典树的题,不过看起来用map更为简单 传送门 题意: 给出一堆字符串构成一个字典,求字典里以某字符串为前缀的字符串有几个 思路: 输入字符串时把字符串的前缀全部存进map并标记次数 查询时直接输出就可以了 AC代码: #include "stdio.h" #include "map" #include "string" #include "string.h" #include "iostream" u…
统计难题 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131070/65535 K (Java/Others) Total Submission(s): 13831    Accepted Submission(s): 5938 Problem Description Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单词数量(单词本身也 是自己…
题意:中文题,统计以某字符串作为前缀的字符串个数 刚学字典树,理解起来十分简单,就是维护一个多叉树,这里用的是链表版本,后面就用的是数组版本了,个人更喜欢数组版本,这里的链表版本就因为 莫名其妙的错误 C++能过而g++就会MLE 可能是两者管理内存的方式不一样吧 #include<iostream> #include<cstring> #include<cstdio> using namespace std; ; struct Trie{ Trie*next[maxn…
Hat's Words 题意:给出一张单词表求有多少个单词是由单词表里的两个单词组成,可以重复!按字典序输出这些单词. 思路:先建一个字典树,然后枚举每个单词,把每个单词任意拆分两部分然后查找. 目测数据不强,开始不知道单词长度都不敢下手了.. struct tree { bool f; tree *next[N]; tree() { for(int i=0;i<N;i++) next[i]=NULL; f=false; } }; void insert(tree *root,char *s)…
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1251 node *head=(node*)malloc(sizeof(node)); for(int i=0; i<26; i++) { head->next[i] = NULL; head->sum = 0; }可以改成node *head=new node();要用c++提交才对,不然G++就内存超限了-_- #include<stdio.h> #include<ma…
#include<stdio.h> #include<string.h> #include<stdlib.h> struct node { node *ne[]; int cnt; }*head; void insert(char *s) { node *p=head,*q; ;s[i];i++) { int id=s[i]-'a'; if(p->ne[id]!=NULL) { p=p->ne[id]; p->cnt++; } else { q=(no…