HDU1251 统计难题 【trie树】
统计难题
注意:本题仅仅有一组測试数据,处理到文件结束.
banana
band
bee
absolute
acm ba
b
band
abc
2
3
1
0
Trie树入门题,做的时候碰到了不少问题。首先是Ctrl+Z没法结束程序。又一次编译又时好时坏。莫名其妙。CB和DEV都这样。然后就是忘记malloc函数分配的变量单元是随机值。这两点攻克了就好办了。
#include <stdio.h>
#include <string.h>
#include <stdlib.h> struct Node{
struct Node *nextAlph[26];
int num;
} root; void insert(char *str)
{
Node *p = &root;
int id;
while(*str){
id = *str - 'a';
if(p->nextAlph[id] == NULL){
p->nextAlph[id] = (Node *)malloc(sizeof(Node));
p = p->nextAlph[id];
memset(p->nextAlph, 0, sizeof(p->nextAlph));
p->num = 0;
}else p = p->nextAlph[id]; ++p->num; ++str;
}
} int FIND(char *str)
{
Node *p = &root;
int id;
while(*str){
id = *str - 'a';
if(p->nextAlph[id] == NULL) return 0;
p = p->nextAlph[id];
++str;
}
return p->num;
} int main()
{
//freopen("stdin.txt", "r", stdin);
char str[12];
while(gets(str), *str) insert(str);
while(gets(str) != NULL) printf("%d\n", FIND(str));
return 0;
}
粘一个典型的错误代码:用数组错误地模拟trie树,忽略了aaa\nbbb\n\nab这样的情况.
#include <stdio.h>
#include <string.h> bool alpha[12][26];
int num[12][26]; void insert(char *str)
{
int id, i;
for(i = 0; str[i]; ++i){
id = str[i] - 'a';
alpha[i][id] = true;
++num[i][id];
}
} int getNum(char *str)
{
int id, i;
for(i = 0; str[i]; ++i){
id = str[i] - 'a';
if(alpha[i][id] == false) return 0;
}
return num[i - 1][id];
} int main()
{
//freopen("stdin.txt", "r", stdin);
char str[12];
while(gets(str), *str) insert(str);
while(gets(str)) printf("%d\n", getNum(str));
return 0;
}
2014.12.16更新
#include <stdio.h>
#include <string.h> #define maxNode 1000000 char str[12];
struct Trie {
int ch[maxNode][26];
int val[maxNode], sz; Trie() {
memset(ch[0], 0, sizeof(ch[0]));
sz = 1;
}
int idx(char ch) { return ch - 'a'; }
void insert(char *str) {
int u = 0, id, i, len = strlen(str);
for (i = 0; i < len; ++i) {
id = idx(str[i]);
if (!ch[u][id]) {
memset(ch[sz], 0, sizeof(ch[sz]));
val[sz] = 0;
ch[u][id] = sz++;
}
u = ch[u][id];
++val[u];
}
}
int find(char *str) {
int u = 0, id, i, len = strlen(str);
for (i = 0; i < len; ++i) {
id = idx(str[i]);
if (ch[u][id]) u = ch[u][id];
else break;
}
return i == len ? val[u] : 0;
}
} T; int main() {
// freopen("stdin.txt", "r", stdin);
while(gets(str), *str)
T.insert(str);
while(gets(str))
printf("%d\n", T.find(str));
return 0;
}
HDU1251 统计难题 【trie树】的更多相关文章
- HDU1251 统计难题 Trie树
题目很水,但毕竟是自己第一道的Trie,所以还是发一下吧.Trie的更多的应用慢慢学,AC自动机什么的也慢慢学.... #include<iostream> #include<cst ...
- HDU1251 统计难题 trie树 简单
http://acm.hdu.edu.cn/showproblem.php?pid=1251 题意: 找前缀数量 裸模板 #include<cstdio> #include<cstr ...
- HDU - 1251 统计难题(trie树)
Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单词数量(单词本身也是自己的前缀). Input输入数据的第一部 ...
- HDU-1251 统计难题,字典树或者map!
统计难题 很久就看过这个题了,但不会~~~不会~~ 题意:给出一张单词表,然后下面有若干查询,每次给出一个单词,问单词表中是否存在以这个单词为前缀的单词,输出数量.本身也是自身的前缀.只有一组数据! ...
- hdu 1251 统计难题(trie树入门)
统计难题 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131070/65535 K (Java/Others)Total Submi ...
- hdu1251 统计难题 字典树
Problem Description Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单词数量(单词本身也是自己 ...
- [hdu1251]统计难题(trie模板题)
题意:返回字典中所有以测试串为前缀的字符串总数. 解题关键:trie模板题,由AC自动机的板子稍加改造而来. #include<cstdio> #include<cstring> ...
- HDU1251统计难题---Trie Tree
map巧过 #include <stdio.h> #include <string.h> #include <map> #include <string> ...
- HDU 1251 统计难题 字典树大水题
今天刚看的字典树, 就RE了一发, 字典树原理还是很简单的, 唯一的问题就是不知道一维够不够用, 就开的贼大, 这真的是容易MLE的东西啊, 赶紧去学优化吧. HDU-1251 统计难题 这道题唯一的 ...
随机推荐
- Oracle 10g R2 Transparent Data Encryption 透明数据加密
Oracle 10g R2 Transparent Data Encryption 透明数据加密 本章介绍如何使用透明数据加密来保护Oracle数据库中的敏感数据,该功能使您可以加密数据库列并管理加密 ...
- Linux中的FTP服务
FTP服务 文件传输协议 FTPFile Transfer Protocol 早期的三个应用级协议之一 基于C/S结构 双通道协议:数据和命令连接 数据传输格式:二进制(默认)和文本 两种模式:服务器 ...
- Java:获取IP地址
文章来源:https://www.cnblogs.com/hello-tl/p/9139323.html import java.net.InetAddress; import java.net.Un ...
- InsecureRequestWarning: Unverified HTTPS request is being made.解决方法
在前面添加: import requests from requests.packages.urllib3.exceptions import InsecureRequestWarning reque ...
- 数据结构实验1:C++实现静态顺序表类
写了3个多小时,还是太慢了.太菜了! 图1 程序运行演示截图1 实验1 1.1 实验目的 熟练掌握线性表的顺序存储结构. 熟练掌握顺序表的有关算法设计. 根据具体问题的需要,设计出合理的表示数据的顺序 ...
- Flask--修改默认的static文件夹的方法
修改的flask默认的static文件夹只需要在创建Flask实例的时候,把static_folder和static_url_path参数设置为空字符串即可. app = Flask(__name__ ...
- asp.net mvc数据验证
文章:asp.net mvc3 的数据验证(一) 文章:ASP.NET MVC下的四种验证编程方式 这个讲了在一个地方展示验证信息 文章:[ASP.NET MVC系列]浅谈数据注解和验证 这个在每个输 ...
- [luoguP2129] L国的战斗续之多路出击(模拟 || 矩阵)
传送门 1.模拟 easy #include <cstdio> #define N 500001 int n, m; int X[N], Y[N], x[N], y[N], a = 1, ...
- JPos学习
基于JPos的消息交换系统 消息交换系统需求解读 消息交换系统不不是一个具体的业务系统,而是业务系统的运转的基础框架: 他的运转是体现在报文交换上的: 要定义一个可被不同业务系统使用的报文规范: 报文 ...
- 神秘数(bzoj 4408)
Description 一个可重复数字集合S的神秘数定义为最小的不能被S的子集的和表示的正整数.例如S={1,1,1,4,13}, 1 = 1 2 = 1+1 3 = 1+1+1 4 = 4 5 = ...