HDU - 1251 统计难题(trie树)
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树)的更多相关文章
- hdu 1251 统计难题(trie树入门)
统计难题 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131070/65535 K (Java/Others)Total Submi ...
- hdu 1251 统计难题 (字典树(Trie)<PS:C++提交不得爆内存>)
统计难题Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131070/65535 K (Java/Others)Total Submis ...
- hdu 1251 统计难题 (字典树入门题)
/******************************************************* 题目: 统计难题 (hdu 1251) 链接: http://acm.hdu.edu. ...
- hdu 1251 统计难题 trie入门
统计难题 Problem Description Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单词数量(单词本 ...
- HDOJ/HDU 1251 统计难题(字典树啥的~Map水过)
Problem Description Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单词数量(单词本身也是自己 ...
- HDU 1251 统计难题(Trie)
统计难题 [题目链接]统计难题 [题目类型]Trie &题解: Trie的模板题,只不过这题坑点在没给数据范围,改成5e5就可以过了,用的刘汝佳蓝书模板 &代码: #include & ...
- hdu 1251 统计难题 字典树第一题。
统计难题 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131070/65535 K (Java/Others)Total Submi ...
- hdu 1251 统计难题(字典树)
统计难题 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131070/65535 K (Java/Others) Total Subm ...
- HDU 1251 统计难题 字典树大水题
今天刚看的字典树, 就RE了一发, 字典树原理还是很简单的, 唯一的问题就是不知道一维够不够用, 就开的贼大, 这真的是容易MLE的东西啊, 赶紧去学优化吧. HDU-1251 统计难题 这道题唯一的 ...
随机推荐
- 删除SVN被锁定文件
svn的working copylocked这种情况大多是因为上次svn命令执行失败且被锁定了. 如果cleanup没有效果的话只好手动删除锁定文件. cd 到svn项目目录下,然后执行命令:del ...
- 低成本FPGA中实现动态相位调整
在FPGA中,动态相位调整(DPA)主要是实现LVDS接口接收时对时钟和数据通道的相位补偿,以达到正确接收的目的.ALTERA的高端FPGA,如STRATIX(r) 系列中自带有DPA电路,但低端的F ...
- 2017中国大学生程序设计竞赛 - 女生专场 Deleting Edges(思维+最短路)
Deleting Edges Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) ...
- IIS监控应用程序池和站点假死,自动重启IIS小工具
文章技术适合初学者.高级的C#开发工程师这些估计都熟悉到烂了,望不要喷. 第一.C#代码要操作IIS 就必须先导入 Microsoft.Web.Administration.dll ,方便控制台程序做 ...
- Java如何解决form表单上传文件,以及页面返回处理结果通知!
前端JSP代码 <form id='formSumbit' class='form-horizontal' action='/ncpay/route/chlsubmcht/batchImpor' ...
- Shell脚本 判断
#Linux系统Shell脚本判断变量文件目录:权限.是否存在.空值.相等 1.字符串判断 str1 = str2 当两个串有相同内容.长度时为真str1 != str2 当串str1和str2不等时 ...
- linux的netstat命令详解
简介 Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Member ...
- sendCloud群发邮件一点总结
1.群发时,若发送的邮件为html页面,则不能用[普通发送]然后foreach循环: 若是单纯的文本,则可以用普通发送,否则,第一封邮件成功后,后面的都是html乱码. 2.若要用html模板发送,可 ...
- java Web jsp嵌入代码的三种方式
1,表达式标签 <%= 2+3%> 唯一有显示功能的标签 作用: 计算表达式的返回值 将表达式的返回值显示到网页中. 注意: 表达式中不能有分号 2,普通脚本标签 <% %> ...
- 【原创】13. MYSQL++之SSQLS(基本用法篇)
1. 综述 终于来到了SSQLS( Specialized SQL Structure),照我看来这是一个很类似于Hibernate的功能.也就是说,通过SSQLS可以将一张表完全对应到一个C++结构 ...