字典树Trie(专项复习)

news2024/9/22 17:28:14

一.P8306 【模板】字典树

 

题目思路:字典树的板子题,熟练写出insert函数(建树),以及query函数(查询)即可.

代码实现:

#include<bits/stdc++.h>
using namespace std;
typedef unsigned long long ull;
typedef long long ll;
#define N 3000005
#define P 131
ll f1[N];
string s;
char ss[N];
ll n, m, num, ans, t, id;
int cnt[N],ch[N][126];
typedef pair<char, ll>pii;
void clear()
{
	for (int i = 0; i <= id; i++) {
		cnt[i] = 0;
		for (int j = 0; j <= 126; j++) {
			ch[i][j] = 0;
		}
	}
	id = 0;
}
void insert(string s) {
	int p=0;
	for (int i = 0; i <= s.size(); i++) {
		int j = (int)s[i];
		if (!ch[p][j]) ch[p][j] = ++id;
		p = ch[p][j];
		cnt[p]++;
	}
}
ll find(string s) {
	int p = 0;
	for (int i = 0; i < s.size(); i++) {
		int j = (int)s[i];
		if (!ch[p][j]) return 0;
		p = ch[p][j];
	}
	return cnt[p];
}
int main()
{
	cin >> t;
	while (t--) {
		clear();
		cin >> n >> m;
		for (int i = 1; i <= n; i++) {
			cin >> s;
			insert(s);
		}
		for (int i = 1; i <= m; i++) {
			cin >> s;
			cout << find(s) << endl;
		}
	}
	return 0;
}

二.P1481 魔族密码

 

题目思路:因为是记录最长词链,我们只要在query函数中,使ans+=cnt[p],即将每个节点的单词个数进行累加即可,insert函数不变.

代码实现:

#include<bits/stdc++.h>
using namespace std;
typedef unsigned long long ull;
typedef long long ll;
#define N 3000005
#define P 131
char s[N];
int ch[N][27],cnt[N];
int n, m, k, num, sum;
void insert(char s[])
{
	int p = 0;
	for (int i = 0; s[i]; i++) {
		int q = s[i] - 'a' + 1;
		if (!ch[p][q]) ch[p][q] = ++num;
		p = ch[p][q];
	}
	cnt[p]++;
}
int query(char s[]) {
	int p = 0, ans = 0;
	for (int i = 0; s[i]; i++) {
		int q = s[i] - 'a' + 1;
		if (!ch[p][q]) return 0;
		p = ch[p][q];
		ans += cnt[p];
	}
	return ans;
}
int main()
{
	cin >> n;
	for (int i = 1; i <= n; i++) {
		cin >> s;
		insert(s);
		sum = max(query(s), sum);
	}
	cout << sum << endl;
	return 0;
}

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

 

题目思路:先把所有的人名字存起来,通过insert函数,这样可以建立从名字到数的映射,标记为1,然后扫一遍,如果为1,输出OK,同时将cnt数组++,如果遇到>1,输出REPEAT,如果为0,说明没有,输出WRONG

代码实现:

#include<bits/stdc++.h>
using namespace std;
typedef unsigned long long ull;
typedef long long ll;
#define N 3000005
#define P 131
char s[N];
int ch[N][27],cnt[N];
int n, m, k, num, sum;
void insert(char s[])
{
	int p = 0;
	for (int i = 0; s[i]; i++) {
		int q = s[i] - 'a' + 1;
		if (!ch[p][q]) ch[p][q] = ++num;
		p = ch[p][q];
	}
	cnt[p]=1;
}
int query(char s[]) {
	int p = 0, ans = 0;
	for (int i = 0; s[i]; i++) {
		int q = s[i] - 'a' + 1;
		if (!ch[p][q]) return 0;
		p = ch[p][q];
	}
	if (!cnt[p]) return 0;
	if (cnt[p] == 1) {
		cnt[p]++;
		return 1;
	}
	return 2;
}
int main()
{
	cin >> n;
	memset(cnt, 0, sizeof(cnt));
	for (int i = 1; i <= n; i++) {
		cin >> s;
		insert(s);
	}
	cin >> m;
	for (int i = 1; i <= m; i++) {
		cin >> s;
		int k = query(s);
		if (k == 0)
			cout << "WRONG" << endl;
		if (k == 1)
			cout << "OK" << endl;
		if (k == 2)
			cout << "REPEAT" << endl;
	}
	return 0;
}

四.P2922 [USACO08DEC] Secret Message G

 

题目思路:和魔族密码这道题有点像,但是我们要维护两个数组,即一个ans数组记录经过该节点的次数,另一个cnt数组记录以该节点结束的次数,在query时,不断累加ans数组的值,最后再sum - cnt[p] + ans[p](因为在最后时应该把以当前结束的次数去掉).

代码实现:

#include<bits/stdc++.h>
using namespace std;
typedef unsigned long long ull;
typedef long long ll;
#define N 3000005
#define P 131
ll s[N];
ll ch[N][3],cnt[N],ans[N];
int n, m, k, num=1, sum;
void insert(ll s[])
{
	ll p = 1;
	for (int i = 1; i <= k; i++) {
		ll q = s[i];
		if (!ch[p][q]) ch[p][q] = ++num;
		p = ch[p][q];
		ans[p]++;
	}
	cnt[p]++;
}
int query(ll s[]) {
	ll p = 1;
	sum = 0;
	for (int i = 1; i <= k; i++) {
		ll q = s[i];
		if (!ch[p][q]) return sum;
		p = ch[p][q];
		sum += cnt[p];
	}
	return sum - cnt[p] + ans[p];
}
int main()
{
	cin >> n >> m;
	for (int i = 1; i <= n; i++) {
		cin >> k;
		for (int j = 1; j <= k; j++) cin >> s[j];
		insert(s);
	}
	for (int i = 1; i <= m; i++) {
		cin >> k;
		for (int j = 1; j <= k; j++) cin >> s[j];
		cout << query(s) << endl;
	}
	return 0;
}

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

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

相关文章

华为云征文|Flexus云服务X实例安装ODBC驱动,在ODBC中建立MySQL数据库连接,通过QT连接云数据库

引出 4核12G-100G-3M规格的Flexus X实例使用测评第2弹&#xff1a;Flexus云服务X实例安装ODBC驱动&#xff0c;在ODBC中建立MySQL数据库连接&#xff0c;通过QT连接云数据库 什么是Flexus云服务器X实例 官方解释&#xff1a; Flexus云服务器X实例是新一代面向中小企业和开发…

第140天:内网安全-横向移动局域网ARP欺骗DNS劫持钓鱼中间人单双向

目录 案例一&#xff1a;局域网&工作组-ARP原理-断网限制-单向 案例二&#xff1a;局域网&工作组-ARP欺骗-劫持数据-双向 案例三&#xff1a;局域网&工作组-DNS 劫持-钓鱼渗透-双向 案例一&#xff1a;局域网&工作组-ARP原理-断网限制-单向 原理&#xff1…

pytorch利用简单CNN实现葡萄病虫害图片识别

1 前言 之前我开发了一个葡萄病虫害的可视化系统&#xff0c;最近就想给这个系统增加2个功能&#xff0c;一个是对接一个AI助手&#xff0c;可以进行葡萄病虫害的咨询&#xff0c;直接对接千问大模型&#xff0c;这个在之前的博文里已经介绍过对接方法了&#xff0c;第二个是做…

ChatGPT与R语言融合技术在生态环境数据统计分析、绘图、模型中的实践与进阶应用

自2022年GPT&#xff08;Generative Pre-trained Transformer&#xff09;大语言模型的发布以来&#xff0c;它以其卓越的自然语言处理能力和广泛的应用潜力&#xff0c;在学术界和工业界掀起了一场革命。在短短一年多的时间里&#xff0c;GPT已经在多个领域展现出其独特的价值…

【JavaWeb】JDBCDruidTomcat入门使用

本章使用技术版本&#xff1a; Tomcatv10.1.25 关于javaweb相关的其他技术&#xff0c;比如tomcat和maven&#xff0c;在我的主页记录了笔记&#xff0c;ajax我用的是本地笔记以后再考虑上传&#xff0c;前端三板斧我用的菜鸟教程文档 JDBC 初识 JDBC概念 JDBC 就是使用Jav…

MatLab基础学习01

MatLab基础学习01 1.基础入门2.MatLab的数据类型2.1数字2.2字符串2.3矩阵2.4.元胞数组2.5结构体 3.MatLab的矩阵的操作3.1矩阵定义与构造3.2矩阵的下标取值 4.MatLab的逻辑流程4. For循环结构4.2 While循环&#xff0c;当条件成立的时候进行循环4.3 IF end 1.基础入门 matlba必…

1.3 SQL注入之MYSQL系统库

一.系统库释义 提供了访问数据库元数据的方式 元数据是关于数据库的数据&#xff0c;如数据库名和表名&#xff0c;列的数据类型或访问权限。 1.information_schema 库&#xff1a;是信息数据库&#xff0c;其中保存着关于MySQL服务器所维护的所有其他数据库的信息&#xff1…

公园智能厕所引导大屏,清楚显示厕位有无人状态

在科技飞速发展的今天&#xff0c;公园的设施也在不断与时俱进。其中&#xff0c;公园智能厕所引导大屏的出现&#xff0c;为游客带来了全新的如厕体验。 走进公园的智能厕所区域&#xff0c;首先映入眼帘的便是那醒目的引导大屏。屏幕上清晰地显示着各个厕位的有无人状态&…

如何使用Cheerio与jsdom解析复杂的HTML结构进行数据提取

背景介绍 在现代网页开发中&#xff0c;HTML结构往往非常复杂&#xff0c;包含大量嵌套的标签和动态内容。这给爬虫技术带来了不小的挑战&#xff0c;尤其是在需要精确提取特定数据的场景下。传统的解析库可能无法有效处理这些复杂的结构&#xff0c;而JavaScript环境下的Chee…

机器学习(五) -- 监督学习(8) --神经网络2

机器学习系列文章目录及序言深度学习系列文章目录及序言 上篇&#xff1a;机器学习&#xff08;五&#xff09; -- 监督学习&#xff08;8&#xff09; --神经网络1 下篇&#xff1a; 前言 tips&#xff1a;标题前有“***”的内容为补充内容&#xff0c;是给好奇心重的宝宝看…

Fast Vision Transformers with HiLo Attention

总结 提出了 HiLo Attention 机制&#xff1a; 该机制将自注意力层分为两部分&#xff1a;Hi-Fi&#xff08;高频注意力&#xff09; 和 Lo-Fi&#xff08;低频注意力&#xff09;。Hi-Fi 捕捉局部细节&#xff0c;通过在局部窗口内应用自注意力&#xff0c;减少了计算复杂度…

图文解析保姆级教程:Tomcat下载、安装、卸载、启动、关闭,解决窗口闪退问题、端口号冲突问题

文章目录 1. 下载2. 安装与卸载3. 启动与关闭4. 常见问题问题1&#xff1a;Tomcat启动时&#xff0c;窗口一闪而过问题2&#xff1a;端口号冲突&#xff08;Tomcat使用的端口被占用&#xff09; 此教程摘选自我的笔记&#xff1a;黑马JavaWeb开发笔记14——Tomcat&#xff08;介…

linux进程处理

1.测试这样没意义&#xff0c;要向后加 wait等待进程结束 1. 2.测试 发送异常结束的信号&#xff0c;通过kill 二、子进程的回收 对于子进程的结束而言&#xff0c;都希望父进程能够知道并作出一定的反应&#xff0c;通过 wait、waitpid 函数可以知道子进程是如何结束的…

人工智能训练师边缘计算实训室解决方案

一、引言 随着物联网&#xff08;IoT&#xff09;、大数据、人工智能&#xff08;AI&#xff09;等技术的飞速发展&#xff0c;计算需求日益复杂和多样化。传统的云计算模式虽在一定程度上满足了这些需求&#xff0c;但在处理海量数据、保障实时性与安全性、提升计算效率等方面…

使用VM创建centos7环境

1、安装VMware Workstation 1.1安装VMware Workstation pro 16 修改自己的安装位置 一直下一步到 1.2激活VMware Workstation pro 16 点击许可证 解压这个压缩包&#xff0c;密码是ai95 之后找到下面文件打开 将生成的许可证码输入到安装VMware Workstation pro 16完成安…

gitk无法打开

1、电脑重装&#xff0c;重新安装git工具后&#xff0c;发现无法打开现有的仓库&#xff0c;报错如下&#xff1a; 搜索网上的信息&#xff0c;显示是目录下没有.git文件夹&#xff0c;但是在xshell查看文件夹是存在的。 然后进行测试git log指令发现也无法进行显示。 然后按…

OJ习题 篇2

&#x1f680;个人主页&#xff1a;奋斗的小羊 &#x1f680;所属专栏&#xff1a;C 很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~ 目录 &#x1f4a5;1、删除有序数组中的重复项&#x1f4a5;2、数组中出现次数超过一半的数字&#x1f4a5;3、最…

python 怎么样反向输出字符串

python如何反向输出字符串&#xff1f;下面给大家介绍两种方法&#xff1a; 方法一&#xff1a;采用列表reversed函数 class Solution(object):def reverse_string(self, s):if len(s) > 1:reversed_s .join(reversed(s))return reversed_s return s 方法二&#xff1a;采…

爬取图片保存为pdf

本文章想借着爬虫给大家介绍一下图片转pdf,有需要的友友们可以看看参考参考&#xff0c;有帮助到友友的可以收藏&#xff0b;关注。下面以爬取初中7年级数学上册为例给大家演示一下。网址是这个 https://mp.weixin.qq.com/s?__bizMzAxOTE4NjI1Mw&mid2650214000&idx…

10-1 注意力提示

感谢读者对本书的关注&#xff0c;因为读者的注意力是一种稀缺的资源&#xff1a; 此刻读者正在阅读本书&#xff08;而忽略了其他的书&#xff09;&#xff0c; 因此读者的注意力是用机会成本&#xff08;与金钱类似&#xff09;来支付的。 为了确保读者现在投入的注意力是值得…