HDU1251 统计难题(字典树|map

Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单词数量(单词本身也是自己的前缀).

Input输入数据的第一部分是一张单词表,每行一个单词,单词的长度不超过10,它们代表的是老师交给Ignatius统计的单词,一个空行代表单词表的结束.第二部分是一连串的提问,每行一个提问,每个提问都是一个字符串.

注意:本题只有一组测试数据,处理到文件结束.
Output对于每个提问,给出以该字符串为前缀的单词的数量.
Sample Input

banana
band
bee
absolute
acm

ba
b
band
abc

Sample Output

2
3
1
0

先贴map做法
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 map<string,int>mp;
 4 string s;
 5 int main()
 6 {
 7     while(getline(cin,s)&&s!=""){
 8         int l =s.size();
 9         string str;
10         for(int i = 0;i < l;++i){
11             str += s[i];
12             mp[str]++;
13         }
14     }
15     while(cin>>s){
16         cout<<mp[s]<<endl;
17     }
18     return 0;
19 }
 1 #include<iostream>
 2 #include<stdio.h>
 3 #include<string.h>
 4 char s[106];int ans= 0;
 5 struct node{
 6     int count;
 7     node *next[27];
 8     node(){for(int i=0;i<27;i++) next[i]=nullptr;count=0;}
 9 };
10 node *p,root;
11 void build_tree(){
12     int l = strlen(s);
13     node *p=&root;
14     for(int i = 0;i < l;++i){
15         if(p->next[s[i]-‘a‘]==NULL){
16             p->next[s[i]-‘a‘] = new node;
17         }
18         p=p->next[s[i]-‘a‘];
19         p->count++;
20     }
21 }
22
23 int search(){
24     int l = strlen(s);
25     node *p=&root;
26     for(int i=0;i <l;++i){
27         if(!p->next[s[i]-‘a‘]) return 0;
28         p=p->next[s[i]-‘a‘];
29     }
30     return p->count;
31 }
32 int main()
33 {
34     while(gets(s)){
35         if(strlen(s)==0) break;
36         build_tree();
37     }
38     while(gets(s)){
39         printf("%d\n",search());
40     }
41     return 0;
42 }

原文地址:https://www.cnblogs.com/h404nofound/p/11700564.html

时间: 2024-11-10 09:04:28

HDU1251 统计难题(字典树|map的相关文章

HDU-1251统计难题 ,字典树

题意:问许多单词中,前缀是某个字符串的个数有多少个: 思路:  用字典树建立,每个节点带上num,记录每次insert是,经过这个点的次数, 每次询问,找到这个前缀对应的节点的num就ok 这道题,c++过,g++不行 ac代码: #include <iostream> #include <cstring> #include <algorithm> #include <string> #include <cstdio> using namespa

hdu1251统计难题(字典树)

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

hdu1251 统计难题 字典树

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

hdu 1251 统计难题 字典树

// hdu 1251 统计难题 字典树 // // 题目大意: // // 有一系列的单词表,以空行结尾,之后会有一些字母串,找出以这些字符串 // 作为前缀的单词的个数 // // // 解题思路: // // 字典树 Trie,在插入字符串的时候每遇到一个节点,该节点的值++.查找的时候 // 字符串时,如果找到了,那么返回当前的val,否则返回0,因为没有以这个字符串 // 为前缀的单词. // // // 感悟: // // 这段时间想学学数据结构,就看了看刘老的大白书,感觉用数组挺巧

HDOJ/HDU 1251 统计难题(字典树啥的~Map水过)

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

hdu_1251统计难题(字典树Trie)

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

HDU 1251 统计难题(字典树)

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

hdu 1251 统计难题 (字典树入门题)

1 /******************************************************* 2 题目: 统计难题 (hdu 1251) 3 链接: http://acm.hdu.edu.cn/showproblem.php?pid=1251 4 算法: 字典树 5 提示: 这题压要用c++提交,G++会超内存 6 *******************************************************/ 7 #include<cstdio> 8

hdoj 1251 统计难题(字典树)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1251 思路分析:该问题要求求出以某个字符串为前缀的单词数目,通过使用字典树,在字典树中添加count记录通过该结点的单词数目即可: 查找时找到前缀的最后一个单词的结点的count值即为所求: 代码如下: #include <cstdio> #include <cstring> #include <iostream> using namespace std; const in

hdu 1251 统计难题 字典树水题

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