hash,以及数据结构——map容器

1.hash是什么?

定义:hash,一般翻译做散列、杂凑,或音译为哈希,是把任意长度的输入(又叫做预映射pre-image)通过散列算法变换成固定长度的输出, 该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间。

这么一说肯定会觉得很难,这百度百科果然不适合小白,可恶

用大白话来说,举个例子,我们有一个字符串ABC,我们会通过一系列运算将其转换为哈希值,使其与别的字符串不相同

哈希算法不过是一个更为复杂的运算,它的输入可以是字符串,可以是数据,可以是任何文件,经过哈希运算后,变成一个固定长度的输出, 该输出就是哈希值。但是哈希算法有一个很大的特点,就是你不能从结果推算出输入,所以又称为不可逆的算法

2.map容器(map<T1, T2>SUM)

注:T1和T2都是数据类型

map是STL的一个关联容器,它提供一对一的hash。

T1可以称为关键字(key),每个关键字只能在map中出现一次;

T2可以称为该关键字的值(value);

因此我们就可以借助map函数来轻易实现hash的用法,那么我们来看几个简单的例题

3.例题

(1)第一题: 字符串哈希模版

题解:刚做这道题的时候我并没有了解到map函数,导致我的代码显得很冗长,是自己去实现map函数的功能的,我首先想到的就是可不可以将abc这种字符串换成一个整数,然后我就想着直接累加,后续我又想到了可能会存在冲突,比如说abc的值等于cba的值,因此我给字符串加上了进制,每一位都多乘一个10,然后,我才过的,如果当前那个数组存在当前值,就减一,最后输出总值,请看AC代码

#include<bits/stdc++.h>
using namespace std;
int n,sum;
char a[10005][2000];
unsigned long long b[10005];
int len[10005];
unsigned long long tt=47;
int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		int cnt=0;
		int ans=0;
		scanf("%s",a[i]);
		len[i]=strlen(a[i]);
		while(cnt<=len[i])
		{
			ans=ans*tt+(unsigned long long)a[i][cnt];
			cnt++;
		}
		b[i]=ans;
	}
	sort(b+1,b+n+1);
	for(int i=1;i<=n-1;i++)
	{
		if(b[i]!=b[i+1])
		sum++;
	}
	printf("%d",sum+1);
	return 0;
} 

(2) 第二题:错误点名的开始

 、题解:这时候我就已经学会用map函数了,因此,直接用map函数可以迅速秒杀这道题

#include <bits/stdc++.h>
using namespace std;
int n,m;
string s;
map<string,int>sum;
int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		cin>>s;
		sum[s]=1;
	}
	scanf("%d",&m);
	for(int i=1;i<=m;i++)
	{
		cin>>s;
		if(sum[s]==1)
		{
			printf("OK\n");
			sum[s]++;
			continue;
		}
		if(sum[s]<1)
		printf("WRONG\n");
		if(sum[s]>1)
		printf("REPEAT\n");
	}
	return 0;
}

第三题:密文搜索

题解:我们只需要将后面的密码转变为哈希数,然后从上述字符串中取出连续的八个字符,如果其哈希值和下面的密码一样的话,就说明,配对成功,次数要加1,最后统计总数即可

#include<bits/stdc++.h>
using namespace std;
map<string,int>sum;
string s,t;
int n;
int ans;
int main()
{
    cin>>s;
    scanf("%d",&n);
    for(int i=0;i<n;i++)
    {
    	cin>>t;
    	sort(t.begin(),t.end());
    	sum[t]++;
	}
	for(int i=0;i<s.size()-7;i++)
	{
		t=s.substr(i,8);
		sort(t.begin(),t.end());
		ans+=sum[t];
	}
	printf("%d",ans);
    return 0;
}

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Maven depoly:Skipping artifact deployment

问题描述&#xff1a; 使用IDEA执行mvn depoly将本地开发的模块发布到Maven私服时&#xff0c;一直提示&#xff1a;Skipping artifact deployment&#xff0c;自动跳过了depoly部署阶段。 问题分析 Maven构建生命周期中的每一个阶段都是由对应的maven插件执行具体工作的。既然…

linux运维xshell同时控制多个窗口的快捷方式

下面去实现同时操作的功能。 1. 找到 工具- 2. 根据需要&#xff0c;选择需要操作的窗口即可。 以上就是对xshell中同时操作多个窗口的方法

【k8s核心概念与专业术语】

k8s架构 1、服务的分类 服务分类按如下图根据数据服务支撑&#xff0c;分为无状态和有状态 无状态引用如下所示&#xff0c;如果一个nginx服务&#xff0c;删除后重新部署有可以访问&#xff0c;这个属于无状态&#xff0c;不涉及到数据存储。 有状态服务&#xff0c;如redis&a…

四、矩阵的分类

目录 1、相等矩阵 2、同形矩阵 3、方阵&#xff1a; 4、负矩阵、上三角矩阵、下三角矩阵&#xff1a; 5、对角矩阵&#xff1a;是方阵 ​编辑7、单位矩阵&#xff1a;常常用 E或I 来表示。它是一个方阵 8、零矩阵&#xff1a; 9、对称矩阵&#xff1a;方阵 1、相等矩阵 …

力扣经典题目解析--两数之和

两数之和 题目地址: 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 简单来说就是在一个数组中找出两个数&#xff0c;这两个数相加要等于给定的target,下面是完整的题目: 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中…

阿里云SSL免费证书到期自动申请部署程序

阿里云的免费证书只有3个月的有效期&#xff0c;不注意就过期了&#xff0c;还要手动申请然后部署&#xff0c;很是麻烦&#xff0c;于是写了这个小工具。上班期间抽空写的&#xff0c;没有仔细测试&#xff0c;可能存在一些问题&#xff0c;大家可以自己clone代码改改&#xf…

(done) 矩阵的对角化,以及是否可对角化的判断、还有对角化的本质。相似对角化计算过程

相似对角化 和 对角化 很大程度上是一回事 甚至判断两个矩阵的相似性&#xff0c;也跟对角化有很大关系 参考视频1&#xff1a;https://www.bilibili.com/video/BV1PA411T7b5/?spm_id_from333.788&vd_source7a1a0bc74158c6993c7355c5490fc600 参考视频2&#xff1a;http…

【移动安全】MobSF联动安卓模拟器配置动态分析教程

原文链接 MobSF联动安卓模拟器配置动态分析教程 实现方式 Windows开启安卓模拟器并进行相关配置作为调试客户端&#xff0c;Linux使用docker开启MobSF作为服务端。 好处&#xff1a;干净&#xff0c;部署简单&#xff0c;不用安装乱七八糟的环境&#xff0c;防止破坏其他应…

最新YOLOv9论文理论:使用可编程梯度信息学习您想学习的内容 | Programmable Gradient Information

YOLOv9: Learning What You Want to Learn Using Programmable Gradient Information YOLOv9 论文地址&#xff1a;https://arxiv.org/pdf/2402.13616.pdf 摘要 当今的深度学习方法侧重于如何设计最合适的目标函数&#xff0c;以便模型的预测结果最接近真实情况。同时&…

CSS轻松学:简单易懂的CSS基础指南

css基础 更多web开发知识欢迎访问我的专栏>>> 01-CSS初体验 层叠样式表 (Cascading Style Sheets&#xff0c;缩写为 CSS&#xff09;&#xff0c;是一种 样式表 语言&#xff0c;用来描述 HTML 文档的呈现&#xff08;美化内容&#xff09;。 书写位置&#xff1a;…

Qt事件过滤器

1. 事件过滤器 void QObject::installEventFilter(QObject *filterObj) bool eventFilter(QObject *obj, QEvent *event); filterObj表示事件筛选器对象&#xff0c;它接收发送到此QObject对象&#xff08;安装事件过滤器的部件对象&#xff09;的所有事件。筛选器可以停止事件…

【Oracle】玩转Oracle数据库(四):SQL语言

前言 嘿&#xff0c;各位数据达人们&#xff01;准备好迎接新的挑战了吗&#xff1f;今天&#xff0c;我们要探索的是数据库世界的魔法咒语——SQL语言&#xff01;&#x1f52e;&#x1f4bb; 在这篇博文【Oracle】玩转Oracle数据库&#xff08;四&#xff09;&#xff1a;SQL…

ssm+springmvc基于springboot的宠物领养系统的设计与实现_j5fk4

宠物领养系统主要是为了提高管理员的工作效率&#xff0c;满足管理员对更方便、更快、更好地存储所有信息和数据检索功能的要求。通过对多个类似网站的合理分析&#xff0c;确定了宠物领养系统的各个模块。考虑到用户的可操作性&#xff0c;经过深入调查研究&#xff0c;遵循系…

Web 前端 UI 框架Bootstrap简介与基本使用

Bootstrap 是一个流行的前端 UI 框架&#xff0c;用于快速开发响应式和移动设备优先的网页。它由 Twitter 的设计师和工程师开发&#xff0c;现在由一群志愿者维护。Bootstrap 提供了一套丰富的 HTML、CSS 和 JavaScript 组件&#xff0c;可以帮助开发者轻松地构建和定制网页和…

css3d制作正方体

使用css3d技术 &#xff0c;制作一个可以动态动画的正方体模型 效果图&#xff1a; 代码如下&#xff1a; <!DOCTYPE html> <html> <head><style>/* 设置高度宽度100%并且左右居中、上下居中 */html,body {width: 100%;height: 100%;display: flex…

【Python笔记-设计模式】对象池模式

一、说明 用于管理对象的生命周期&#xff0c;重用已经创建的对象&#xff0c;从而减少资源消耗和创建对象的开销 (一) 解决问题 主要解决频繁创建和销毁对象所带来的性能开销问题。如数据库连接、线程管理、网络连接等&#xff0c;对象的创建和销毁成本相对较高&#xff0c…

求最短路问题总结

图论题最重要的是如何抽象出图&#xff0c;怎么定义点和边。 朴素Dijkstra算法&#xff1a;稠密图 堆优化版的Dijkstra算法&#xff1a;稀疏图 存在负权边一般用SPFA&#xff0c;个别情况用Bellman-Fold。 多源汇最短路用Floyd算法。

React18源码: reconciler执行流程

reconciler执行流程 1 &#xff09;概述 此处先归纳一下react-reconciler包的主要作用&#xff0c;将主要功能分为4个方面&#xff1a; 输入&#xff1a;暴露api函数&#xff08;如&#xff1a;scheduleUpdateOnFiber&#xff09;, 供给其他包&#xff08;如react包&#xff0…

mysql mgr集群部署

一、前言 mysql mgr集群是为了实现mysql高可用&#xff0c;分为单主集群和多主集群&#xff0c;单主集群只有一个主节点可写&#xff0c;节点发生故障时&#xff0c;自动进行主从的故障切换&#xff0c;多主集群所有节点都可写&#xff0c;当节点发生故障时&#xff0c;将故障节…

activeMq将mqtt发布订阅转成消息队列

1、activemq.xml置文件新增如下内容 2、mqttx测试发送&#xff1a; 主题&#xff08;配置的模糊匹配&#xff0c;为了并发&#xff09;&#xff1a;VirtualTopic/device/sendData/12312 3、mqtt接收的结果 4、程序处理 package comimport cn.hutool.core.date.DateUtil; imp…