字典树相关例题题解

一.P2580 于是他错误的点名开始了

 

 

这道题也类似于模版题,只要我们熟悉插入和查找的过程,一样可以解决,这里只要注意一下第一次出现和其它次出现所输出是不一样的,这里我们只要在查找函数中返回不同的值,这样就可以解决了。

#include<bits/stdc++.h>
using namespace std;
#define N 1000005
int n, m, id, ans, num;
int f[N][27], cnt[N];   //f数组为建树用,cnt数组记录插入次数
bool vis[N];    //标记数组
char s[N];void insert(char s[])   //插入函数
{int p = 0;  //p指针指向根节点for (int i = 0; s[i]; i++) {int q = s[i] - 'a' + 1;if (!f[p][q]) f[p][q] = ++id;  //如果没有该节点,就新建一个p = f[p][q];    //继续往下插入}vis[p] = true;    //插入完成,为下面查询时做铺垫
}int find(char s[])    //查找函数,注意这里要返回0,1,2三个值代表不同状态
{int p = 0;for (int i = 0; s[i]; i++) {int q = s[i] - 'a' + 1;if (!f[p][q]) return 0;   //如果没有查找到该字符,退出p = f[p][q];}if (!vis[p]) return 0;   //没有查找到该字符串if (cnt[p]==0) {         //找到该字符串,但要讨论是第几次查到++cnt[p];return 1;}return 2;
}
int main()
{memset(vis, false, sizeof(vis));memset(cnt, 0, sizeof(cnt));cin >> n;for (int i = 1; i <= n; i++) {cin >> s;insert(s);}cin >> m;for (int i = 1; i <= m; i++) {cin >> s;int k = find(s);if (k == 0)                   //如果没有找到cout << "WRONG" << endl;if (k == 1)                   //如果第一次找到cout << "OK" << endl;if (k == 2)                   //如果不是第一次找到cout << "REPEAT" << endl;}return 0;
}


二.P1481 魔族密码

 

 对于这题我们只需要进行插入操作就可以,不需要进行查找操作,准确来说应该是在插入过程中进行查询,我们只需要在一个单词的末尾加上一个cnt数组记录插入单词末尾的次数后续的插入如果经过这个单词末尾(也就是能够连接起来),我们加上cnt[p],最后比较出最大的再+1就可以了

#include<bits/stdc++.h>
using namespace std;
#define N 2005
int f[N][27], cnt[N];
char s[N];
int n, m, sum, ans, id;int solve(char s[])
{int p = 0;    //p头指针,指向根节点int ans1 = 0;for (int i = 0; s[i]; i++){int q = s[i] - 'a' + 1;if (!f[p][q])f[p][q] = ++id;  //如果不存在该节点,创造该节点p = f[p][q];ans1 += cnt[p];  //如果能够连接在一起,词链加1}cnt[p]++;     //单词末尾记录ans = max(ans, ans1);   //找到最长词链return ans;
}
int main()
{cin >> n;for (int i = 1; i <= n; i++) {cin >> s;sum = solve(s);}cout << sum+1 << endl;   //加一是因为最开始的那个起始单词没有纳入return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/696714.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL优化之SQL优化详解

(/≧▽≦)/~┴┴ 嗨~我叫小奥 ✨✨✨ &#x1f440;&#x1f440;&#x1f440; 个人博客&#xff1a;小奥的博客 &#x1f44d;&#x1f44d;&#x1f44d;&#xff1a;个人CSDN ⭐️⭐️⭐️&#xff1a;传送门 &#x1f379; 本人24应届生一枚&#xff0c;技术和水平有限&am…

Laravel01 课程介绍以及Laravel环境搭建

Laravel01 课程介绍 1. Laravel2. mac开发环境搭建(通过Homebrew)3. 创建一个项目 1. Laravel 公司中面临着PHP项目与Java项目并行&#xff0c;所以需要我写PHP的项目&#xff0c;公司用的框架就是Laravel&#xff0c;所以在B站上找了一门课学习。 Laravel中文文档地址 https…

leetcode hot 100最后一块石头重量Ⅱ

在本题中&#xff0c;我们可以知道&#xff0c;是要求最后石头返还的重量&#xff0c;也就是&#xff0c;将整个数组分割成两个子集&#xff0c;求让两个子集的差值最小。这和上一道分割整数集类似&#xff0c;只是需要我们返回差值。所以我们采用动态规划01背包来做&#xff0…

StarRocks加速查询——低基数全局字典

前言 StarRocks-2.0引入了低基数全局字典&#xff0c;可以通过全局字典将字符串的相关操作转换成整型相关操作&#xff0c;极大提升了查询性能。StarRocks 2.0后的版本默认会开启低基数字典优化。 一、低基数字典 对于利用整型替代字符串进行处理&#xff0c;通常使用字典编码…

穿越Redis单线程迷雾:从面试场景到技术内核的解读

目录 ​编辑 前言 Redis中的多线程 I/O多线程 Redis中的多进程 结论 延伸阅读 前言 很多人都遇到过这么一道面试题&#xff1a;Redis是单线程还是多线程&#xff1f;这个问题既简单又复杂。说他简单是因为大多数人都知道Redis是单线程&#xff0c;说复杂是因为这个答案…

Leetcode - 周赛385

目录 一&#xff0c;3042. 统计前后缀下标对 I 二&#xff0c;3043. 最长公共前缀的长度 三&#xff0c;3044. 出现频率最高的质数 四&#xff0c;3045. 统计前后缀下标对 II 一&#xff0c;3042. 统计前后缀下标对 I 该题数据范围小&#xff0c;可直接暴力求解&#xff0c;…

Studio One2024免费版永久使用下载

当然可以。Studio One 6是一款功能强大且易于使用的数字音频工作站软件&#xff0c;适用于各种音乐制作和音频处理需求。以下是一些关于Studio One 6的详细信息&#xff1a; Studio One6下载: https://wm.makeding.com/iclk/?zoneid39867 多轨录音和混音&#xff1a;Studio …

代码随想录算法训练营第二十四天 | 回溯算法理论基础,77. 组合 [回溯篇]

代码随想录算法训练营第二十四天 回溯算法理论基础什么是回溯法回溯法的理解回溯法模板 LeetCode 77.组合题目描述思路参考代码总结修改后的代码(微调整)优化版本优化后的参考代码 回溯算法理论基础 文章讲解&#xff1a;代码随想录#回溯算法理论基础 视频讲解&#xff1a;带你…

[WebDav] WebDav基础知识

文章目录 什么是WebDavWebDav常用命令WebDav常用命令的测试&#xff08;代码&#xff09;PROPFIND 方法测试PUT 方法测试GET 方法测试PROPPATCH方法 WebDav缓存Cache-ControlEtag测试 强制重新验证不需要缓存 WebDav的锁WebDav的状态码WebDav身份验证WebDav版本控制WebDav和FTP…

思考:如何写出让同事难以维护的代码?

本文从【程序命名&注释】【数据类型&类&对象】【控制执行流程】和【程序/结构设计】四个方面梳理了一些真实案例&#xff0c;相信通过这些案例你能迅速get技能&#xff1a;如何写出让同事难以维护的代码doge。 比起什么程序员删库跑路&#xff0c;我更喜欢「写出让…

高校学科竞赛平台|基于springboot高校学科竞赛平台设计与实现(源码+数据库+文档)

高校学科竞赛平台目录 目录 基于springboot高校学科竞赛平台设计与实现 一、前言 二、系统功能设计 三、系统实现 1、竞赛题库管理 2、竞赛信息管理 3、晋级名单管理 4、往年成绩管理 5、参赛申请管理 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、最…

Flask框架:用Python打造精巧而强大的Web应用

在当今数字化时代&#xff0c;Web应用的需求不断增长&#xff0c;而对于开发者来说&#xff0c;选择一个适合的框架来构建Web应用是至关重要的。Flask框架作为一个简洁而灵活的Python微型框架&#xff0c;以其优雅的设计和丰富的可扩展性&#xff0c;为开发者提供了一个强大而精…

HAT论文详解:Activating More Pixels in Image Super-Resolution Transformer

code&#xff1a;https://github.com/XPixelGroup/HAT paper: https://arxiv.org/abs/2309.05239 1. 概述 本文是对Swinir的改进&#xff0c;目前很多图像超分Benchmark的SOTA。相对于SwinIR的改进主要有三个地方&#xff1a;1. 引入Channel Attention,以获得更好的全局能力&…

通过OCR实现纯数字识别

基于飞浆paddle训练框架 照这个改的 https://www.paddlepaddle.org.cn/documentation/docs/zh/practices/cv/image_ocr.html 训练不到10分钟 10epoch cpu&#xff1a;inter i5 8250 U 脚本生成的图10000 验证训练&#xff1a;3:7 预测结果 chatgpt写的代码&#xff0c;生成数…

PLC_博图系列☞基本指令“异或“运算

PLC_博图系列☞基本指令“异或“运算 文章目录 PLC_博图系列☞基本指令“异或“运算背景介绍X&#xff1a;“异或”运算说明参数示例真值表 关键字&#xff1a; PLC、 西门子、 博图、 Siemens 、 异或 背景介绍 这是一篇关于PLC编程的文章&#xff0c;特别是关于西门子的…

shell脚本实现Mysql分库分表备份

一.数据库的分库分表&#xff1f; 12张图把分库分表讲的明明白白&#xff01;阿里面试&#xff1a;我们为什么要分库分表https://mp.weixin.qq.com/s?__bizMzU0OTE4MzYzMw&mid2247547792&idx2&sn91a10823ceab0cb9db26e22783343deb&chksmfbb1b26eccc63b784879…

PCIE1—快速实现PCIE接口上下位机通信(一)

1.简介 PCI Express&#xff08;PCIE&#xff09;是一种高速串行总线标准&#xff0c;广泛应用于计算机系统中&#xff0c;用于连接主板和外部设备。在FPGA领域中&#xff0c;PCIE也被广泛应用于实现高速数据传输和通信。FPGA是一种灵活可编程的集成电路&#xff0c;可以根据需…

猫头虎分享已解决Bug || Web服务故障:WebServiceUnavailable, HTTPServerError

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

ubuntu常见配置

ubuntu各个版本的安装过程大差小不差&#xff0c;可以参考&#xff0c;ubuntu20.04 其它版本换一下镜像版本即可 安装之后需要配置基本的环境&#xff0c;我的话大概就以下内容&#xff0c;后续可能有所删改 sudo apt-get update sudo apt-get install gcc sudo apt-get inst…

vulnhub靶场之Deathnote

一.环境搭建 1.靶场描述 Level - easy Description : dont waste too much time thinking outside the box . It is a Straight forward box . This works better with VirtualBox rather than VMware 2.靶场下载 https://www.vulnhub.com/entry/deathnote-1,739/ 3.启动环…