2024蓝桥杯每日一题(哈希)

news2024/9/29 7:32:06

备战2024年蓝桥杯 -- 每日一题
Python大学A组

        试题一:星空之夜
        试题二:模拟散列表
        试题三:字符串哈希
        试题四:四数方和
        试题五:扫雷


试题一:星空之夜

【题目描述】

        夜空深处,闪亮的星星以星群的形式出现在人们眼中,形态万千。一个星群是指一组非空的在水平,垂直或对角线方向相邻的星星的集合。一个星群不能是一个更大星群的一部分。星群可能是相似的。如果两个星群的形状、包含星星的数目相同,那么无论它们的朝向如何,都认为它们是相似的。通常星群可能有 88 种朝向,如下图所示:

        现在,我们用一个二维 0101 矩阵来表示夜空,如果一个位置上的数字是 11,那么说明这个位置上有一个星星,否则这个位置上的数字应该是 00。给定一个夜空二维矩阵,请你将其中的所有星群用小写字母进行标记,标记时相似星群用同一字母,不相似星群用不同字母。标注星群就是指将星群中所有的 11 替换为小写字母。

【输入格式】

        第一行包含一个整数 W,表示矩阵宽度。

        第二行包含一个整数 H,表示矩阵高度。

        接下来 H 行,每行包含一个长度为 W 的 01序列,用来描述整个夜空矩阵。

【输出格式】

        输出标记完所有星群后的二维矩阵。

        用小写字母标记星群的方法很多,我们将整个输出读取为一个字符串,能够使得这个字符串字典序最小的标记方式,就是我们想要的标记方式。

        输出这个标记方式标出的最终二维矩阵。

【输入格式】

        0≤W,H≤100,
        0≤星群数量 ≤500,
        0≤0 不相似星群数量 ≤26,
        1≤ 星群中星星的数量 ≤160

【输入样例】

23
15
10001000000000010000000
01111100011111000101101
01000000010001000111111
00000000010101000101111
00000111010001000000000
00001001011111000000000
10000001000000000000000
00101000000111110010000
00001000000100010011111
00000001110101010100010
00000100110100010000000
00010001110111110000000
00100001110000000100000
00001000100001000100101
00000001110001000111000

  【输出样例】

a000a0000000000b0000000
0aaaaa000ccccc000d0dd0d
0a0000000c000c000dddddd
000000000c0b0c000d0dddd
00000eee0c000c000000000
0000e00e0ccccc000000000
b000000e000000000000000
00b0f000000ccccc00a0000
0000f000000c000c00aaaaa
0000000ddd0c0b0c0a000a0
00000b00dd0c000c0000000
000g000ddd0ccccc0000000
00g0000ddd0000000e00000
0000b000d0000f000e00e0b
0000000ddd000f000eee000

【解题思路】

        哈希方式是每一个连通块中任意两个点的欧式距离累加。

【Python程序代码】

from collections import *
from math import *
w = int(input())
h = int(input())
st = []
hash,id,eps = [0]*30, int(0) ,0.000001
for i in range(h):
    st.append(list(input()))
def dist(x1,y1,x2,y2):
    return ((x1-x2)**2 + (y1-y2)**2)**0.5
def dfs(x,y):
    q.append([x,y])
    st[x][y]='0'
    for i in range(x-1,x+2):
        for j in range(y-1,y+2):
            if i==x and j==y:continue
            if i<0 or i>=h or j<0 or j>=w:continue
            if st[i][j]=='1':
                dfs(i,j)
def get_hash(q):
    res = 0
    for i in range(len(q)):
        for j in range(i+1,len(q)):
            res += dist(q[i][0],q[i][1],q[j][0],q[j][1])
    return res
def get_id(res):
    global id
    for i in range(id):
        if fabs(res-hash[i])<eps:
            return chr( ord('a') + i )
    hash[id] = res
    id += 1
    return chr(ord('a') + id -1)


for i in range(h):
    for j in range(w):
        if st[i][j]=='1':
            q = []
            dfs(i,j)
            res = get_hash(q)
            id1 = get_id(res)
            for kx,ky in q:
                st[kx][ky]=id1
for i in range(h):
    for j in range(w):
        print(st[i][j],end='')
    print()


试题二:模拟散列表

【题目描述】

维护一个集合,支持如下几种操作:

  1. I x,插入一个整数 x;
  2. Q x,询问整数 x 是否在集合中出现过;

现在要进行 N次操作,对于每个询问操作输出对应的结果。

【输入格式】

        第一行包含整数 N,表示操作数量。

        接下来 N 行,每行包含一个操作指令,操作指令为 I xQ x 中的一种。

【输出格式】

        对于每个询问指令 Q x,输出一个询问结果,如果 x 在集合中出现过,则输出 Yes,否则输出 No

        每个结果占一行。

【数据范围】

        1≤N≤105
        −109≤x≤109

【输入样例】

5
I 1
I 2
I 3
Q 2
Q 5

【输出样例】

Yes
No

【解题思路】

        用set+in

【Python程序代码】

n = int(input())
s = set()
for i in range(n):
    a,b = map(str,input().split())
    if a=='I':
        s.add(b)
    else:
        if b in s:print('Yes')
        else:print('No')

试题三:字符串哈希

【题目描述】

        给定一个长度为 n 的字符串,再给定 m 个询问,每个询问包含四个整数 l1,r1,l2,r2,请你判断 [l1,r1]和 [l2,r2] 这两个区间所包含的字符串子串是否完全相同。字符串中只包含大小写英文字母和数字。

【输入格式】

        第一行包含整数 n 和 m,表示字符串长度和询问次数。

        第二行包含一个长度为 n 的字符串,字符串中只包含大小写英文字母和数字。

        接下来 m 行,每行包含四个整数 l1,r1,l2,r2,表示一次询问所涉及的两个区间。

        注意,字符串的位置从 11 开始编号。

【输出格式】

        对于每个询问输出一个结果,如果两个字符串子串完全相同则输出 Yes,否则输出 No

每个结果占一行。

【数据范围】

        1≤n,m≤105

【输入样例】

8 3
aabbaabb
1 3 5 7
1 3 6 8
1 2 1 2

【输出样例】

Yes
No
Yes

【解题思路】

        模板提

【Python程序代码】

n,m = map(int,input().split())
s = " " + input()
mod = 1<<64
N,P = 1000010,131
h,p = [0]*N,[0]*N
def get_hash(l,r):
    return (h[r] - h[l-1]*p[r-l+1] + mod)%mod
p[0]=1
for i in range(1,n+1):
    p[i] = (p[i-1]*P)%mod
    h[i] = (h[i-1]*P + ord(s[i]))%mod
for _ in range(m):
    l1,r1,l2,r2 = map(int,input().split())
    if get_hash(l1,r1)==get_hash(l2,r2):print('Yes')
    else:print('No')

试题四:四数平方和

【题目描述】

        四平方和定理,又称为拉格朗日定理:每个正整数都可以表示为至多 4 个正整数的平方和。如果把 0 包括进去,就正好可以表示为 4 个数的平方和。比如:

        对于一个给定的正整数,可能存在多种平方和的表示法。要求你对 44 个数排序:

0≤a≤b≤c≤d

        并对所有的可能表示法按 a,b,c,d 为联合主键升序排列,最后输出第一个表示法。

【输入格式】

        输入一个正整数 N。

【输出格式】

        输出4个非负整数,按从小到大排序,中间用空格分开。

【数据范围】

        0<N<5∗106

【输入样例】

5

【输出样例】

0 0 1 2

【解题思路】

         先枚举两个数的平方和,然后再枚举两个。

【Python程序代码】

n = int(input())
h = [-1]*(n*5)
for c in range(0,int(n**0.5)+2):
    for d in range(c,int(n**0.5)+2):
        if h[c*c+d*d]!=-1:continue
        else:h[c*c+d*d] = c
def work():
    for a in range(0,int(n**0.5)+1):
        for b in range(a,int((n/2)**0.5)+1):
            t = n - a*a -b*b
            if h[t]==-1:continue
            else:
                d = int((t - h[t]**2)**0.5)
                print(a,b,h[t],d)
                return
work()

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

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

相关文章

【JavaScript 漫游】【041】File 对象、FileList 对象、FileReader 对象

文章简介 本篇文章为【JavaScript 漫游】专栏的第 041 篇文章&#xff0c;主要对浏览器模型中 File 对象、FileList 对象和 FileReader 对象的知识点进行了简记。 File 对象 File 对象代表一个文件&#xff0c;用来读写文件信息。它继承了 Blob 对象&#xff0c;或者说是一种…

Springboot+vue的四川美食分享网站+数据库+报告+免费远程调试

项目介绍: Springbootvue的四川美食分享网站。Javaee项目&#xff0c;springboot vue前后端分离项目 本文设计了一个基于Springbootvue的前后端分离的四川美食分享网站&#xff0c;采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&am…

计算机视觉之三维重建(3)---单视几何

文章目录 一、问题提出二、无穷远点、无穷远线、无穷远平面2.1 2D空间2.2 3D空间 三、影消点和影消线3.1 2D平面上的无穷远点&#xff0c;无穷远线变换3.2 影消点3.3 影消线 四、单视重构 一、问题提出 1. 当摄像机标定后&#xff0c;内部参数 K K K 已知&#xff0c;外部参数…

界面控件DevExpress ASP.NET Ribbon组件 - 完美复刻Office 365体验!

无论用户是喜欢传统工具栏菜单外观、样式&#xff0c;还是想在下一个项目中复制Office 365 web UI&#xff0c;DevExpress ASP.NET都提供了所需要的工具&#xff0c;帮助用户打造更好的应用程序界面。 P.S&#xff1a;DevExpress ASP.NET Web Forms Controls拥有针对Web表单&a…

JavaWeb -- HTTP -- WEB服务器TOMCAT

一.HTTP介绍: HTTP(Hyper Text Protocol) 实际上是一种超文本传输的协议,规定了浏览器跟服务器之间的一些数据传输的规则 例如B/S 对于浏览器的请求,以及相应服务器的响应,都必须依靠这种协议,规范,才能够彼此之间相互 理解 HTTP的协议特点: 1.基于TCP协议: 面向连接 更加安全…

Vscode初建Vue时几个需要注意的问题

首先放图 注意点1.打开文件夹时&#xff0c;可以是VUE2 或者其他&#xff0c;但不能是VUE&#xff0c;会报错 注意点2.终端输入命令“npm init -y" npm init -y -y 的含义&#xff1a;yes的意思&#xff0c;在init的时候省去了敲回车的步骤&#xff0c;生成的默认的packag…

【目标检测】YOLOv9理论解读与代码分析

前言 YOLO这个系列的故事已经很完备了&#xff0c;比如一些Decoupled-Head或者Anchor-Free等大的策略改动已经在YOLOv8固定下来&#xff0c;后面已经估计只有拿一些即插即用的tricks进行小改。 mmdetection框架的作者深度眸也在知乎上对“是否会有YOLOv9”这一观点发表看法&a…

搞了半天blender整动画这么爽,骨骼重定向一回,动作就可以到处套用,和音频对轨也好使

我们搞到了运动数据&#xff08;可能是bvh文件&#xff0c;也可能是fbx文件&#xff09;之后&#xff0c;想要让某个静态的模型动起来。 我们假定用的是Tpose的模型&#xff08;因为我这个bvh文件是Tpose用的&#xff0c;所以为了动作映射不出问题&#xff0c;优先整的这种模型…

C语言——利用冒泡排序模拟实现qsort函数

一.冒泡排序 冒泡排序是C语言中众多排序中的一种。它的排序逻辑为&#xff08;升序&#xff09;&#xff1a;从第一个元素开始和相邻的比较&#xff0c;如果第一个元素大于第二个元素&#xff0c;则交换&#xff0c;反之不交换&#xff1b;第二个再与第三个元素比较&#xff0…

jsvmp逆向实战X-Bogus篇,算法还原

jsvmp逆向实战X-Bogus篇&#xff0c;算法还原 前言X-Bogus算法逻辑寻找log插桩位置第四步第三步 前言 看过很多大佬关于X-Bogus算法还原的文章&#xff0c;都是通过log插桩&#xff0c;分析日志信息再结合动态调试一步步抽丝剥茧&#xff0c;最终还原算法&#xff0c;但是不同…

第1篇:Mysql数据库表结构导出字段到Excel(一个sheet中)

package com.xx.util;import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook;import java.sql.*; import java.io.*;public class DatabaseToExcel {public static void main(String[] args) throws Exception {// 数据库连接配置String u…

基于SpringBoot和HeatMap的全球地震热力图可视化实践

目录 前言 一、关于热力图 1、HeatMap简介 2、属性和方法介绍 二、全球地震热力图反演 1、地震信息查询开发 2、前端地图开发 三、地震带反演成果 1、三大地震带反演 2、地震区域分析 总结 前言 众所周知&#xff0c;全球的地震带主要可以分为三处地震带——环太平洋地…

利用API打造卓越的用户体验

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;日常聊聊 ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 正文 1. 数据驱动的设计 2. 功能扩展与整合 3. 实时性与响应性 4. 个性化推荐与定制化服务 结语 我的其他博客 正文 随着数字化时代的…

我的电脑win11系统安装了谷歌浏览器,桌面的快捷方式打不开

安装好浏览器以后双击打不开右键打开文件位置也弹窗报错提示 但是我发现开始栏里面可以打开 说明我的软件应该是没有问题的&#xff0c;研究了一下 我实际的安装目录在&#xff1a;C:\Program Files\Google\Chrome\Application 桌面的快捷方式右键查看属性显示的地址却不对&a…

js生成笛卡尔集合

let arr[[黑, 金, 白],[16G, 32G],[电信, 移动, 联通], ]let listarr.reduce((a, b) > { return a.flatMap(x > b.map(y > [...x, y]))}, [[]] )console.log(list)生成结果

easyExcel大数据量导出oom

easyExcel大数据量导出 异常信息 com.alibaba.excel.exception.ExcelGenerateException: java.lang.OutOfMemoryError: GC overhead limit exceededat com.alibaba.excel.write.ExcelBuilderImpl.fill(ExcelBuilderImpl.java:84)at com.alibaba.excel.ExcelWriter.fill(Excel…

(MATLAB)第二十一章 Simulink仿真设计初步

Simulink是MATLAB的重要组成部分&#xff0c;可以非常容易地实现可视化建模&#xff0c;并把理论研究和工程实践有机地结合在一起&#xff0c;不需要书写大量程序&#xff0c;只需要使用鼠标和键盘对已有模块进行简单的操作和设置。 21.1 Simulink简介 Simulink是MATLAB软件的…

汽车ECU的虚拟化技术(五) -- 对MCU虚拟化实现难点的思考

目录 1.概述 2.虚拟化软件的难点 2.1 虚拟化中的中断处理 2.2 虚拟ECU的通信 3.小结 1.概述 在上面文章里汽车ECU的虚拟化技术(四) -- 对MCU虚拟化实现难点的思考-CSDN博客&#xff0c;解了OEM面临新的电子电气架构下的集成难点&#xff0c;引入了hypervisor以及VM调度机制…

内网使用rustdesk进行远程协助

文章目录 前言一、搭建rustdesk中继服务器二、搭建文件下载服务器三、创建引导脚本四、使用 前言 内网没有互联网环境&#xff0c;没法使用互联网上有中继服务器的远程协助工具&#xff0c;如teamviewer、todesk、向日癸等&#xff1b;在内网进行远程维护可以自己搭建中继服务…

缤纷浏览器 —— 一键换肤,个性随心换(H5实现浏览器换肤效果)

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…