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

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

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

banana
band
bee
absolute
acm ba
b
band
abc

Sample Output

2
3
1
0 题解:好吧,最简单的trie树却RE,MLE,OLE各1次
主要坑点是各种细节而非算法本身
比如并没有告诉字符串的个数
比如鬼畜的输入
但还是学到了一点优化,统计的时候可以把每个子节点的cnt换成根节点的cnt
这样cnt[pre][id]就变成了cnt[pre]
省了不少内存
代码:
MLE的:
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std; int tr[][],cnt[][],tot=;
char c[],s[]; void add()
{
int n=strlen(c);
int pre=,id;
for(int i=;i<n;i++)
{
id=c[i]-'a';
if(tr[pre][id]==)
{
tr[pre][id]=++tot;
}
cnt[pre][id]++;
pre=tr[pre][id];
}
} int search()
{
int n=strlen(s);
int pre=,id;
for(int i=;i<n;i++)
{
id=s[i]-'a';
if(tr[pre][id]==||i==n-)
{
return cnt[pre][id];
}
pre=tr[pre][id];
}
} int main()
{
while(gets(c),c[]!='\0')
{
add();
}
while(gets(s))
{
printf("%d\n",search());
}
}
AC的:
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std; int tr[][],cnt[],tot=;
char c[],s[]; void add()
{
int n=strlen(c);
int pre=,id;
for(int i=;i<n;i++)
{
id=c[i]-'a';
if(tr[pre][id]==)
{
tr[pre][id]=++tot;
}
pre=tr[pre][id];
cnt[pre]++;
}
} int search()
{
int n=strlen(s);
int pre=,id;
for(int i=;i<n;i++)
{
id=s[i]-'a';
if(tr[pre][id]==)
{
return ;
}
pre=tr[pre][id];
}
return cnt[pre];
} int main()
{
while(gets(c),c[]!='\0')
{
add();
}
while(gets(s))
{
printf("%d\n",search());
}
}
 
 

HDU - 1251 统计难题(trie树)的更多相关文章

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

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

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

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

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

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

  4. hdu 1251 统计难题 trie入门

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

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

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

  6. HDU 1251 统计难题(Trie)

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

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

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

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

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

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

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

随机推荐

  1. build RTK on ubuntu 16.04

    RTK-1.4.0 InsightToolkit-4.12.2 ./cmake/nvcc-check.cmake line:86 commentout as #message(FATAL_ERROR ...

  2. shell中字体变色

    在linux中给字体使用数字代码变色 字体颜色代码:重置0 ,黑色30,红色31,绿色32,黄色33,蓝色34,洋红35,青色36,浅灰37 效果代码:1m加粗  2m加下划线  5m闪动效果  7m ...

  3. 如何用FFmpeg API采集摄像头视频和麦克风音频,并实现录制文件的功能

    之前一直用Directshow技术采集摄像头数据,但是觉得涉及的细节比较多,要开发者比较了解Directshow的框架知识,学习起来有一点点难度.最近发现很多人问怎么用FFmpeg采集摄像头图像,事实 ...

  4. SQL万能密码:' or 1='1

    select name,pass from tbAdmin where name='admin' and pass='123456' 输入用户名:' or 1='1 SQL变成下面这个样子: sele ...

  5. Scanner的小实例

    package com.b; import java.util.Random; import java.util.Scanner; //猜拳游戏 1.人从键盘输入 2.计算机从电脑随机输入 3.条件判 ...

  6. 杂项-WiFi:JotSpot

    ylbtech-杂项-WiFi:JotSpot JotSpot公司成立于2003年,由曾经创建了搜索引擎Excite的Joe Kraus一手创建,曾获得了来自Mayfield和RedPoint 两家风 ...

  7. AJAX验证此ID是否有对应的name

    在表格输入一个ID,然后自动根据ID在数据库中查找是否有对应name 这是javascript部分,利用ajax验证 $(document).ready(function() { $("#c ...

  8. C# 异常内存信息导出Dump文件

    背景:很多情况下程序崩溃我们只能看到程序抛出来的异常信息,但是有时候异常信息不清不楚我们处理异常还是一头雾水,这种情况下我们就很希望能有种办法获取程序运行时的内存进行调试,查看其中的变量.参数.方法执 ...

  9. Java微信公众平台开发(二)--微信服务器post消息体的接收

    转自: http://www.cuiyongzhi.com/post/39.html 在上一篇的文章中我们详细讲述了如何将我们的应用服务器和微信腾讯服务器之间的对接操作,最后接入成功,不知道你有没有发 ...

  10. c++builder 编译独立运行

    cb6 XE7 Project>Options> Packages>Runtime Packages>Link with runtime packags勾去掉.c++ Link ...