<题目链接>

统计难题

Problem Description
Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单词数量(单词本身也是自己的前缀).
Input
输入数据的第一部分是一张单词表,每行一个单词,单词的长度不超过10,它们代表的是老师交给Ignatius统计的单词,一个空行代表单词表的结束.第二部分是一连串的提问,每行一个提问,每个提问都是一个字符串.
注意:本题只有一组测试数据,处理到文件结束.
 
Output
对于每个提问,给出以该字符串为前缀的单词的数量.
 
Sample Input
banana
band
bee
absolute
acm
 
ba
b
band
abc
 
Sample Output
2
3
1
0
 
tire树指针实现:
 #include <cstdio>
#include <malloc.h>
#include <cstring>
#include <algorithm>
using namespace std; char s[];
struct node{
int cnt;
node *next[]; //该节点的所有子节点
void init(){ //初始化该节点
cnt=;
for(int i=;i<;i++)
next[i]=NULL;
}
};
void insert(node *root,char *s){
node *p =root ,*now;
for(int i=;s[i];i++){
int tmp=s[i]-'a';
if(p->next[tmp]==NULL){ //如果该节点为空,则创建一个新的节点
p->next[tmp]=new node;
p=p->next[tmp];
p->init();
}
else p=p->next[tmp]; //如果该节点不空,则继续向下插入
p->cnt++; //以该节点结尾的前缀个数+1
}
}
int find(node *root,char *s){
node *p=root;
for(int i=;s[i];i++){
int tmp=s[i]-'a';
p=p->next[tmp];
if(!p)return ; //如果遇到不满足的节点,就直接结束
}
return p->cnt;
}
int main(){
node *root=new node;
root->init();
while(gets(s)&&strlen(s))
insert(root,s);
while(gets(s))
printf("%d\n",find(root,s));
return ;
}

trie树数组实现:

 #include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; const int N = 1e6+;
int trie[N][]; //trie[now][next]代表第一次遍历到该节点的序号
int num[N]={},pos=;
void Insert(char *str){
int now=;
for(int i=;str[i];i++){
int next=str[i]-'a';
if(!trie[now][next])trie[now][next]=++pos; //如果没有遍历过该节点,就给该节点赋值(相当于给trie树创建一个节点)
now=trie[now][next];
num[now]++; //该前缀的数量+1
}
}
int Search(char *str){
int now=;
for(int i=;str[i];i++){
int next=str[i]-'a';
if(!trie[now][next])return ; //只要一找到不符合的节点,就直接返回0
now=trie[now][next]; //当前节点继续向下匹配
}
return num[now];
}
int main(){
char str[];
while(gets(str)&&strlen(str))
Insert(str);
while(gets(str))
printf("%d\n",Search(str));
return ;
}

map做法

#include <cstdio>
#include <string>
#include <map>
#include <iostream>
#include <algorithm>
using namespace std; int main()
{
string s, str[];
int cur = ;
map<string, int>mapp;
while (getline(cin, s) && s[] != '\0') //注意是用这个来判断空行,首先一定要用getline读入,其次是s[0]=='\0'时表示是空行
{
string ss;
for (int i = ; i <=s.length(); i++) {
ss = s.substr(, i); //获得字符串s中从第0位开始的长度为i的字符串
mapp[ss]++;
}
}
while (cin >> s)
{
printf("%d\n", mapp[s]);
}
return ;
}
 
2018-04-08

hdu 1251:统计难题[【trie树】||【map】的更多相关文章

  1. HDU - 1251 统计难题(trie树)

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

  2. hdu 1251 统计难题(trie树入门)

    统计难题 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131070/65535 K (Java/Others)Total Submi ...

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

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

  4. hdu 1251 统计难题 (字典树(Trie)<PS:C++提交不得爆内存>)

    统计难题Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131070/65535 K (Java/Others)Total Submis ...

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

    /******************************************************* 题目: 统计难题 (hdu 1251) 链接: http://acm.hdu.edu. ...

  6. hdu 1251 统计难题 trie入门

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

  7. HDU 1251 统计难题(Trie)

    统计难题 [题目链接]统计难题 [题目类型]Trie &题解: Trie的模板题,只不过这题坑点在没给数据范围,改成5e5就可以过了,用的刘汝佳蓝书模板 &代码: #include & ...

  8. hdu 1251 统计难题 字典树第一题。

    统计难题 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131070/65535 K (Java/Others)Total Submi ...

  9. hdu 1251 统计难题(字典树)

    统计难题 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131070/65535 K (Java/Others) Total Subm ...

  10. HDU 1251 统计难题 字典树大水题

    今天刚看的字典树, 就RE了一发, 字典树原理还是很简单的, 唯一的问题就是不知道一维够不够用, 就开的贼大, 这真的是容易MLE的东西啊, 赶紧去学优化吧. HDU-1251 统计难题 这道题唯一的 ...

随机推荐

  1. react框架的状态管理

    安装: cnpm install --save redux cnpm install --save react-redux   安装好后导入模块内容: impor {createStore} from ...

  2. dubbo框架原理

    Dubbo提供了三个关键功能:基于接口的远程调用,容错与负载均衡,服务自动注册与发现. Dubbo使得调用远程服务就像调用本地java服务一样简单. https://www.jianshu.com/p ...

  3. 列式数据库~clickhouse 数据同步使用

    一 简介:进一步了解clickhouse二 数据操 1 单机建表 create TABLE aaa (    id UInt32,    uid UInt32,    amount Float64,  ...

  4. Database学习 - mysql 连接数据库 库操作

    连接数据库 语法格式: mysql -h 服务器IP -P 端口号 -u用户名 -p密码 --prompt 命令提示符 --delimiter 指定分隔符 示例: mysql -h 127.0.0.1 ...

  5. 【CXF】: No binding operation info while invoking unknown method with params unknown.

    CXF发布webservice之后访问报错: org.apache.cxf.interceptor.Fault: No binding operation info while invoking un ...

  6. 使用xmanager图形化远程连接rhel6

    使用xmanager图形化远程连接rhel6 xmanager中Xbrowser可以提供图形化桌面远程.和vnc比,可以类似于本地一样用户切换. 操作步骤: linux服务端: 1:查看/etc/in ...

  7. 简单透彻理解JSONP原理及使用

    首先提一下JSON这个概念,JSON是一种轻量级的数据传输格式,被广泛应用于当前Web应用中.JSON格式数据的编码和解析基本在所有主流语言中都被实现,所以现在大部分前后端分离的架构都以JSON格式进 ...

  8. caffe添加自己编写的Python层

    由于Python的灵活性,我们在caffe中添加自己定义的层时使用python层会更加方便,开发速速也会比C++更快,现在我就在这儿简单说一下如何在caffe中添加自定义的python层(使用的原网络 ...

  9. vue的学习(常用功能)

    1.介绍vue MVP和MVVM模式!!! mvp模式,其中m是模型是ajax请求数据, v是视图层(html),p是控制器,就是使用jq来实现业务逻辑相关操作(DOM操作很多) MVVM模式,其中M ...

  10. ES系列十一、ES的index、store、_source、copy_to和all的区别

    1.基本概念 1.1._source 存储的原始数据._source中的内容就是搜索api返回的内容,如: { "query":{  "term":{   &q ...