解题报告-HDOJ-1251(字典树)

ACM中常用算法----字符串 ACM中常用算法—-字符串ACM中常用的字符串算法不多,主要有以下几种: Hash 字典树 KMP AC自动机 manacher 后缀数组 EX_KMP SAM(后缀自动机) 回文串自动机 下面来分别介绍一下:0. Hash字符串的hash是最简单也最常用的算法,通过某种hash函数将不同的字符串分别对应到不同的数字.进而配合其他数据结构或STL可以做到判重,统计,查询等操作. #### 字符串的h 阅读详情

    先给大家介绍一下什么是字典树。

    字典树,顾名思义,是树的一种,哈希树的变种,优点是节省存储空间,优化查询效率。

    数据结构:

 

typedef struct _node {

    Node *child[26];    //指向下一个字母,因为英文字母只有26个

    int n;   //表示前缀数目

    bool flag;   //表示是否以改字母结尾(按题目需要增加)

   ……  //其余内容可以根据题目要求进行增加
}Node;

 

下图是以ban,bag,bee,cat,cap,ca这6个单词构成的字典树:有三角形表示flag为true,没有表示false

 

字典树的插入操作:

void Insert (Node *root, char *str)
{//向以root为根的树中加入字符串str
    int len = strlen (str);
    Node *ans = root;
    for (int i =0; i < len; i ++)
    {
        if (ans->child[str[i] - 'a'] == NULL)//没有该字母
        {
            Node *NewNode = (Node *) malloc (sizeof (Node));    //建立节点
            //初始化
            NewNode->n = 1;
            for (int j = 0; j < 26; j++)
            {
                NewNode->child[j] = NULL;
            }

            ans->child[str[i] - 'a'] = NewNode;
            ans = NewNode;
        }
        else
        {
            ans = ans->child[str[i] - 'a'];  //找下一个字母
            ans->n ++;    //统计前缀数目
        }
    }
}

 

以下为1251的实现代码:

#include <iostream>

using namespace std;

char ch1[100000][20];
//char ch1[10][20];
char ch2[20];

typedef struct Node 
{
    Node *child[26];
    int n;
}Node;

void Insert (Node *root, char *str)
{
    int len = strlen (str);
    Node *ans = root;
    for (int i =0; i < len; i ++)
    {
        if (ans->child[str[i] - 'a'] == NULL)
        {
            Node *NewNode = (Node *) malloc (sizeof (Node));    
            NewNode->n = 1;
            for (int j = 0; j < 26; j++)
            {
                NewNode->child[j] = NULL;
            }
            ans->child[str[i] - 'a'] = NewNode;
            ans = NewNode;
        }
        else
        {
            ans = ans->child[str[i] - 'a'];
            ans->n ++;
        }
    }
}

int Search (Node *root, char *str)
{
    int len = strlen (str);
    Node *ans = root;
    int i;
    for (i = 0; i < len; i ++)
    {
        if (ans->child[str[i] - 'a'] != NULL)
        {
            ans = ans->child[str[i] - 'a'];
        }
        else
        {
            break;
        }
    }
    if (i == len)
    {
        return ans->n;
    }
    return 0;
}

int main ()
{
    Node *root = (Node *)malloc (sizeof (Node));
    root->n = 0;
    int i;
    for (i = 0; i < 26; i++)
    {
        root->child[i] = NULL;
    }

    i = 1;
    while (1) 
    {
        gets (ch1[i]);
        if (ch1[i][0] == 0)
        {
            break;
        }
        Insert (root, ch1[i]);
        i ++;
    }

    while (gets (ch2) != NULL)
    {    
        cout<<Search (root, ch2)<<endl;
    }
}

 

操作系统课程项目 OS project —— Pintos from Project 1 to Project 3 Pintos Project 陪伴我们操作系统课程大半个学期了…… 虽然做了这么长时间,个人能力有限,pintos代码,看过的可能也就看懂了一半吧,更不用说没看过的了…… 但是也找到了一些有价值的资料,整理一下,供后辈们参考…… 关于环境的问题,最好是用ubuntu 16.04 windows用户不要折腾装双系统了,特别是win10,动不动更新一下,说不定双系统就出问题了,linux... 阅读详情

相关推荐

YOLOv8实例分割实战:从LabelMe标注到模型训练全流程(附完整代码)

本文详细介绍了YOLOv8实例分割的完整实战流程,涵盖从使用LabelMe进行数据标注、格式转换,到构建数据集、配置参数并完成模型训练的全过程。文章提供了详尽的代码示例和常见问题解决方案,旨在帮助开发者高效掌握YOLOv8实例分割技术,快速应用于实际项目。

java5的博客 813

hdoj1251-字典树入门水题

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

Max的博客 249

MATLAB实战:用Costas环和Gardner环搞定QPSK同步问题(附完整代码)

本文详细介绍了如何使用MATLAB实现Costas环和Gardner环联合解决QPSK同步问题,包括载波同步和定时同步的技术原理、MATLAB代码实现及性能分析。通过完整的仿真示例和工程实践建议,帮助读者掌握QPSK同步技术的核心要点,提升数字通信系统的解调性能。

agile9scrum的博客 688

统计难题(hdoj1251)

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

Last_Freezen_yue的博客 556

GBT 27930-2015/2023国标充电协议A类CAN报文ID说明

国标充电CAN的ID,仅供学习参考。

qqq080的博客 7788

小程序选项卡以及swiper套用(跨页面)

选项卡tab和swpier之间的套用 其实我之前写过一篇选项卡的切换demo,大家阔以参考一下 小程序多个选项卡切换 那今天写这个demo呢,是因为项目需求,所以仅供参考。 我是拿到了home.wxml的数组下标, 通过url传参的方式去将这个id传到下一个页面, 下一个页面接收以后再将id赋值给对应的tabI或者currentId(swiper 的下标) 实现上一个页面进来以后直接进入对应的页...

Rechal_Mei的博客 3596

HDOJ1251-统计难题(trie树入门)

统计难题 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131070/65535 K (Java/Others) Total Submission(s): 16945    Accepted Submission(s): 7292 Problem Description Ignatius最近遇到一个难题,老师交给他很

mowayao的专栏 885

yolov5直接调用zed相机实现三维测距(python)

zed代码比较简洁,但是一定要把环境配置好,后续自己会把他当做普通双目标定,去对比分析效果,并完善相关功能。

积极向上的mr.d的博客 1万+

HDOJ1251 统计难题(字典树)

WA了,回头找错。。。#include<iostream> #include<string.h> using namespace std; #define maxn 26 struct node{ int num; node *next[maxn]; }; node *root; node *build(){ node *p=new node; p->num=1;

xx_ii 322

Python爬虫实战:如何抓取POI信息(公共场所)位置信息

获取公共场所的信息:如餐厅、商店、医院、景点等。抓取POI的基本信息:如名称、类别、地址、评分等。获取POI的地理坐标:经度和纬度信息。存储POI数据:将抓取到的POI信息存储到本地数据库中。通过本篇文章,我们详细介绍了如何使用Python爬虫抓取POI信息。通过Google Maps API和OpenStreetMap(Overpass API),我们展示了如何获取餐厅、商店、医院等公共场所的位置信息,并进一步探讨了如何处理分页、存储数据以及反爬虫策略。

2201_76125261的博客 376

YOLOv11改进策略【Backbone/主干网络】|替换HGNetV2骨干,包含RT-DETR中的l、x模型

本文记录的是基于HGNetv2的YOLOv11目标检测改进方法研究。本文利用HGNetv2替换YOLOv11的骨干网络,HGNetv2 通过其 GPU 推理友好的 3×3 标准卷积和层次化 HG Block 结构,能够为骨干网络提供高效且完整的特征提取能力。并且其中的和可在降低计算量的同时丰富特征表达,增强对多尺度目标特征的捕获能力,进而提高模型精度。本文配置了原论文中rtdetr-lrtdetr-x,以满足不同算力和检测精度的需求。

Limiiiing的博客 669

HDOJ1251 统计难度 MAP运用

统计难题 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131070/65535 K (Java/Others) Total Submission(s): 43343    Accepted Submission(s): 15544 Problem Description Ignatius最近遇到一个难题,老

勇敢前进的ACMer 327

1、 快速掌握R:初学者的计量经济学指南

本博文旨在为初学者提供一个快速掌握R语言的指南,特别是针对计量经济学领域的应用。内容涵盖了R的基本操作、数据管理、可视化、函数编写以及高级统计分析方法,如OLS回归、异方差修正和集群标准误差计算等。通过实际示例和详细说明,帮助读者在数据分析和科学研究中更加得心应手。

weixin_35734408的博客 145

HDOJ 1251 统计难题 字典树

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

hpuhjl的专栏 2218

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

HDOJ-1251 字典树

字典树模板题,没什么好说的,不过奇怪的是我用g++提交就会超内存,而用c++则AC,好惊悚。#include #include #include #include using namespace std; #define MAX 26 char CH='a'; struct node{ int key; node *next[MAX]; node(){ ke

一步一步走 489

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

hdoj-1251-统计难题(字典树)

统计难题 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131070/65535 K (Java/Others) Total Submission(s): 22524    Accepted Submission(s): 9490 Problem Description Ignatius最近遇到一个难题,

网络二师兄 506

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

HDOJ-1251-统计难题 解题报告

这是一道字典树

JZQT_T的博客 941

解题报告-HDOJ-1075(字典树)

这一题和1251都是字典树,题意是给出单词以及单词的翻译,最后让你用这些单词翻译给出来的语句。 我的思路是,在每一个flag为true的单词保存对应的翻译,当翻译句子时,搜索字典树,当找到该单词、flag为true、并且该单词已经结束(很重要),就输出对应的翻译,否则,输出原来的单词。 以下是实现代码: #include using namespace std; char str[30

勤奋也是一种天赋 1207

HDOJ 1251-统计难题【模板:字典树】

统计难题 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131070/65535 K (Java/Others) Total Submission(s): 30080    Accepted Submission(s): 11716 Problem Description Ignatius最近遇到一个难题,老

小I的博客 1399

HDU-#1251 统计难题(字典树)

题目大意:给你很多单词,要求查找以某些单词为前缀的单词数量有多少?      解题思路:很明显的一道字典树的入门题。一直都习惯用数组code的,突然看资料都是指针写的,很不习惯呀!不过重新看了下基础,回过头来写,发现还不是那么难,很好写的。言归正传,字典树主要就是那几步,一是建立树,查找和释放。资料在网上有很多的,就不赘述了。code给了很详细的解释了,详见code。      题目来源:ht

VoidSun 456

字典树

又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来节约存储空间,最大限度地减少无谓的字符串比较,查询效率比哈希表高。    字典树与字典很相似,当你要查一个单词是不是在字典树中,首先看单词的第一个字母是不是在字典的第一层,如果不

忆梦 822

【练习04】 字典树 1006 统计难题

这一题数组要开到百万级,如1000005,不然会RE。 解题思路:字典树,为了最后统计出前缀被包含的次数,需要在构造trie的时候增加一个数组记录经过每个节点的路径数。 //模板开始 #include #include #include #include #include #include #include #include

liuzhushiqiang的专栏 578

ACM中字符串题常用算法

转自http://blog.youkuaiyun.com/ck_boss/article/details/47066727 ACM中常用算法—-字符串 ACM中常用的字符串算法不多,主要有以下几种: Hash字典树KMPAC自动机manacher后缀数组EX_KMPSAM(后缀自动机)回文串自动机 下面来分别介绍一下: 0. Hash 字符串的hash是最简单也最常用的算法,通过某种has

oliver233的博客 5089

ACM中常用算法—-字符串

ACM中常用的字符串算法不多,主要有以下几种: Hash字典树KMPAC自动机manacher后缀数组EX_KMPSAM(后缀自动机)回文串自动机 下面来分别介绍一下: 0. Hash 字符串的hash是最简单也最常用的算法,通过某种hash函数将不同的字符串分别对应到不同的数字.进而配合其他数据结构或STL可以做到判重,统计,查询等操作. #### 字符串的hash

mosquito_zm的博客 807

HDOJ.1251

今天我学习了字典树(trie tree) 从 作者:xxy 出处: http://www.cnblogs.com/TheRoadToTheGold/ 学的 可以用来查询字符串是多少字符串的前缀 sum在插入时每一层都会加1 感觉非常精妙 #include<bits/stdc++.h> using namespace std; int trie[400001][26],len,ro...

weixin_30551947的博客 129

hdoj-1251 统计难题(字典树)

统计难题 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131070/65535 K (Java/Others) Total Submission(s): 46370    Accepted Submission(s): 16476 Problem Description Ignatius最近遇到一个难题,老

落辰哀的博客 283
上一篇: 看了一次又一次,每次都有不同的感受....
下一篇: 解题报告-HDOJ-1075(字典树)
WellerZhao
博客等级 码龄15年 11粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值