当前位置: 首页 > news >正文

2024蓝桥杯每日一题(DFS)

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

        试题一:奶牛选美
        试题二:树的重心
        试题三:大臣的差旅费
        试题四:扫雷


试题一:奶牛选美

【题目描述】

        听说最近两斑点的奶牛最受欢迎,约翰立即购进了一批两斑点牛。不幸的是,时尚潮流往往变化很快,当前最受欢迎的牛变成了一斑点牛。约翰希望通过给每头奶牛涂色,使得它们身上的两个斑点能够合为一个斑点,让它们能够更加时尚。牛皮可用一个 N×M的字符矩阵来表示,如下所示:

................
..XXXX....XXX...
...XXXX....XX...
.XXXX......XXX..
........XXXXX...
.........XXX....

        其中,X表示斑点部分。如果两个 X在垂直或水平方向上相邻(对角相邻不算在内),则它们属于同一个斑点,由此看出上图中恰好有两个斑点。约翰牛群里所有的牛都有两个斑点。约翰希望通过使用油漆给奶牛尽可能少的区域内涂色,将两个斑点合为一个。在上面的例子中,他只需要给三个 .. 区域内涂色即可(新涂色区域用 ∗ 表示):

................
..XXXX....XXX...
...XXXX*...XX...
.XXXX..**..XXX..
........XXXXX...
.........XXX....

        请帮助约翰确定,为了使两个斑点合为一个,他需要涂色区域的最少数量。

【输入格式】

        第一行包含两个整数 N和 M。

        接下来 N 行,每行包含一个长度为 M 的由 X 和 .. 构成的字符串,用来表示描述牛皮图案的字符矩阵。

【输出格式】

        输出需要涂色区域的最少数量。

【数据范围】

        1≤N,M≤50

【输入样例】

6 16
................
..XXXX....XXX...
...XXXX....XX...
.XXXX......XXX..
........XXXXX...
.........XXX....

【输出样例】

3

【解题思路】

        用2次BFS,第一次用来找出两个斑点,第二次用来找最短的连接线。

【Python程序代码】

from collections import *
n,m = map(int,input().split())
a = []
for i in range(n):a.append(list(input()))
st = [[0]*(m+5) for _ in range(n+5) ]
t,f = 1,0
for i in range(n):for j in range(m):if a[i][j]=='X' and st[i][j]==0:q=deque()q.append([i,j])st[i][j]=twhile q:tx,ty = q.popleft()for zx,zy in [(-1,0),(1,0),(0,-1),(0,1)]:nx,ny = tx+zx,ty+zyif nx<0 or nx>=n or ny<0 or ny>=m:continueif a[nx][ny]=='.' or st[nx][ny]:continuest[nx][ny]=tq.append([nx,ny])t += 1def bfs(i_,j_):q = deque()q.append([i_,j_,0])vis = [[0]*(m+5) for _ in range(n+5) ]vis[i_][j_]=1while q:tx,ty,z = q.popleft()if st[tx][ty]==2:return zfor zx,zy in [(-1,0),(1,0),(0,1),(0,-1)]:nx,ny = tx+zx,ty+zyif nx < 0 or nx >= n or ny < 0 or ny >= m: continueif vis[nx][ny]: continuevis[nx][ny]=1q.append([nx,ny,z+1])return 0res = n*m
for i in range(n):for j in range(m):if st[i][j]==1:tep = bfs(i,j)res = min(res,tep)
print(res-1)

试题二:树的重心

【题目描述】

        给定一颗树,树中包含 n个结点(编号 1∼n)和 n−1 条无向边。请你找到树的重心,并输出将重心删除后,剩余各个连通块中点数的最大值。重心定义:重心是指树中的一个结点,如果将这个点删除后,剩余各个连通块中点数的最大值最小,那么这个节点被称为树的重心。

【输入格式】

        第一行包含整数 n,表示树的结点数。

        接下来 n−1行,每行包含两个整数 a 和 b,表示点 a 和点 b 之间存在一条边。

【输出格式】

        输出一个整数 m,表示将重心删除后,剩余各个连通块中点数的最大值。

【数据范围】

        1≤n≤100000

【输入样例】

9
1 2
1 7
1 4
2 8
2 5
4 3
3 9
4 6

 【输出样例】

4

【解题思路】

         本体上就是一个树的遍历问题,遍历去掉每一个点,找出答案。

【Python程序代码】

n = int(input())
h,e,ne,idx = [-1]*(n+5),[0]*(2*n+5),[0]*(2*n+5),0
def add(a,b):global idxe[idx]=b; ne[idx]=h[a]; h[a]=idx; idx+=1
for i in range(n-1):a,b = map(int,input().split())add(a,b); add(b,a)
ans,st = n,[False]*(n+5)
def dfs(u):global ansst[u]=Trueres,sumv = 0,1i = h[u]while i!=-1:j = e[i]if not st[j]:s = dfs(j)res = max(res,s)sumv += si = ne[i]res = max(res,n-sumv)ans = min(ans,res)return sumv
dfs(1)
print(ans)

试题三: 大臣的旅费

【题目描述】

        很久以前,T王国空前繁荣。为了更好地管理国家,王国修建了大量的快速路,用于连接首都和王国内的各大城市。为节省经费,T 国的大臣们经过思考,制定了一套优秀的修建方案,使得任何一个大城市都能从首都直接或者通过其他大城市间接到达。同时,如果不重复经过大城市,从首都到达每个大城市的方案都是唯一的。J 是 T 国重要大臣,他巡查于各大城市之间,体察民情。所以,从一个城市马不停蹄地到另一个城市成了 J最常做的事情。他有一个钱袋,用于存放往来城市间的路费。聪明的 J发现,如果不在某个城市停下来修整,在连续行进过程中,他所花的路费与他已走过的距离有关。具体来说,一段连续的旅途里,第 1千米的花费为 11,第 2 千米的花费为 12,第 3 千米的花费为 13,…,第 x 千米的花费为 x+10。也就是说,如果一段旅途的总长度为 1 千米,则刚好需要花费 11,如果一段旅途的总长度为 2 千米,则第 1千米花费 11,第 2 千米花费 12,一共需要花费 11+12=23。J 大臣想知道:他从某一个城市出发,中间不休息,到达另一个城市,所有可能花费的路费中最多是多少呢?

【输入样例】

【输出格式】

        输出一个整数,表示大臣 J 最多花费的路费是多少。

【数据范围】

【输入样例】

5
1 2 2
1 3 1
2 4 5
2 5 4

【输出样例】

135

【解题思路】

         可以发现本题就是求树的直径的问题,经典做法就是先遍历找出距离点d最远的点x,然后找到距离x点最优的y点,其中x到y的距离就是树的直径。

【Python程序代码】

n = int(input())
mp = [[]for i in range(n+1)]
for i in range(n-1):a,b,c = map(int,input().split())mp[a].append([b,c])mp[b].append([a,c])
dist = [0]*(n+1)
def dfs(st,father,distance):dist[st] = distancefor b,c in mp[st]:if b!=father:dfs(b,st,distance+c)
dfs(1,-1,0)
u = 1
for i in range(1,n+1):if dist[i]>dist[u]:u=i
dfs(u,-1,0)
for i in range(1,n+1):if dist[i]>dist[u]:u=i
s = dist[u]
print( s*10 + s*(1+s)//2 )   

 试题四:扫雷

【题目描述】

        小明最近迷上了一款名为《扫雷》的游戏。其中有一个关卡的任务如下:在一个二维平面上放置着 n 个炸雷,第 i个炸雷 (xi,yi,ri)表示在坐标 (xi,yi)(处存在一个炸雷,它的爆炸范围是以半径为 ri 的一个圆。为了顺利通过这片土地,需要玩家进行排雷。玩家可以发射 m 个排雷火箭,小明已经规划好了每个排雷火箭的发射方向,第 j 个排雷火箭 (xj,yj,rj)表示这个排雷火箭将会在 (xj,yj)处爆炸,它的爆炸范围是以半径为 rj 的一个圆,在其爆炸范围内的炸雷会被引爆。同时,当炸雷被引爆时,在其爆炸范围内的炸雷也会被引爆。现在小明想知道他这次共引爆了几颗炸雷?你可以把炸雷和排雷火箭都视为平面上的一个点。一个点处可以存在多个炸雷和排雷火箭。当炸雷位于爆炸范围的边界上时也会被引爆。

【输入格式】

        输入的第一行包含两个整数 n、m。

        接下来的 n 行,每行三个整数 xi,yi,ri表示一个炸雷的信息。

        再接下来的 m 行,每行三个整数 xj,yj,rj表示一个排雷火箭的信息。

【输出格式】

        输出一个整数表示答案。

【数据范围】  

【输入样例】

2 1
2 2 4
4 4 2
0 0 5

【输出样例】

2

 【解题思路】

        首先,对在同一点的炸雷和排雷火箭进行去重处理,然后枚举每一个排雷火箭,遍历排雷范围,如果能扫到雷则该炸雷也存放到排雷火箭队列。最后用排雷火箭队列模拟排雷。

【Python程序代码】

import sys
from collections import *
input = sys.stdin.readline
n, m = map(int, input().split())
num = Counter()
find = dict()
for _ in range(n):x, y, r = map(int, input().split())if (x, y) not in find:find[(x, y)] = 0num[(x, y)] += 1find[(x, y)] = max(find[(x, y)], r)
pq = deque()
f = dict()
for _ in range(m):x, y, r = map(int, input().split())if (x, y) not in f:f[(x, y)] = 0f[(x, y)] = max(f[(x, y)], r)
for (x, y), r in f.items():for i in range(x - r, x + r + 1):for j in range(y - r, y + r + 1):if (i - x) ** 2 + (j - y) ** 2 <= r ** 2:if (i, j) in find:pq.append((i, j, find[(i, j)]))del find[(i, j)]
res = 0
while pq:x, y, r = pq.popleft()res += num[(x, y)]for i in range(x - r, x + r + 1, 1):for j in range(y - r, y + r + 1, 1):if (i - x) ** 2 + (j - y) ** 2 <= r ** 2:if (i, j) in find:pq.append((i, j, find[(i, j)]))del find[(i, j)]
print(res)

相关文章:

2024蓝桥杯每日一题(DFS)

备战2024年蓝桥杯 -- 每日一题 Python大学A组 试题一&#xff1a;奶牛选美 试题二&#xff1a;树的重心 试题三&#xff1a;大臣的差旅费 试题四&#xff1a;扫雷 试题一&#xff1a;奶牛选美 【题目描述】 听说最近两斑点的奶牛最受欢迎&#xff0c;…...

Docker 笔记(五)--链接

这篇笔记记录了Docker 的Link。 官方文档&#xff1a; Legacy container links - Communication across links 目录 参考Legacy container linksConnect using network port mappingConnect with the linking systemThe importance of naming Communication across linksEnviro…...

如何处理Android悬浮弹窗双击返回事件?

目录 1 前言 1.1 准备知识 1.2 问题概述 2 解决方案 3 代码部分 3.1 动态更新窗口焦点 3.2 窗口监听返回事件 3.3 判断焦点是否在窗口内部 3.4 窗口监听焦点移入/移出 4 注意事项 4.1 窗口范围 4.2 空隙处的返回事件处理 1 前言 1.1 准备知识 1&#xff09;开发环…...

高可用篇_A Docker容器化技术_II Docker环境搭建和常见命令

原创作者&#xff1a;田超凡&#xff08;程序员田宝宝&#xff09; 版权所有&#xff0c;引用请注明原作者&#xff0c;严禁复制转载 Docker安装 Docker 要求 CentOS7 系统的内核版本在 3.10以上 &#xff0c;查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker 。 …...

Vue.js+SpringBoot开发食品生产管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 加工厂管理模块2.2 客户管理模块2.3 食品管理模块2.4 生产销售订单管理模块2.5 系统管理模块2.6 其他管理模块 三、系统展示四、核心代码4.1 查询食品4.2 查询加工厂4.3 新增生产订单4.4 新增销售订单4.5 查询客户 五、…...

Python面试笔记

Python面试笔记 PythonQ. Python中可变数据类型与不可变数据类型&#xff0c;浅拷贝与深拷贝详解Q. 解释什么是lambda函数&#xff1f;它有什么好处&#xff1f;Q. 什么是装饰器&#xff1f;Q. 什么是Python的垃圾回收机制&#xff1f;Q. Python内置函数dir的用法&#xff1f;Q…...

springboot 查看和修改内置 tomcat 版本

解析Spring Boot父级依赖 去到项目的根pom文件中&#xff0c;找到parent依赖&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>${springboot.version}…...

003——移植鸿蒙

目录 一、顶层Make分析 二、添加一个新的单板 2.1 Kconfig 2.2 Makefile 2.2.1 顶层Makefile 2.2.2 platform下的Makefile 2.2.3 platform下的bsp.mk文件 2.3 编译与调试 2.4 解决链接错误 三、内核启动流程的学习 3.1 韦东山老师总结的启动四步 3.2 启动文件分析…...

罗马数字转整数-力扣通过自己编译器编译

学会将力扣题目用自己自带的编译软件编译---纯自己想的本题解法 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如&#xff0c; 罗马数字 2 写做 II &#xff0c;即为两…...

深入解析JVM加载机制

一、背景 Java代码被编译器变成生成Class字节码&#xff0c;但字节码仅是一个特殊的二进制文件&#xff0c;无法直接使用。因此&#xff0c;都需要放到JVM系统中执行&#xff0c;将Class字节码文件放入到JVM的过程&#xff0c;简称类加载。 二、整体流程 三、阶段逻辑分析 3…...

python redis中blpop和lpop的区别

python redis中lpop()方法是获取并删除左边第一个对象。 def lpop(self,name: str,count: Optional[int] None,) -> Union[Awaitable[Union[str, List, None]], Union[str, List, None]]:"""Removes and returns the first elements of the list name.By de…...

第四百一十回

文章目录 1. 概念介绍2. 方法与细节2.1 获取方法2.2 使用细节 3. 示例代码4. 内容总结 我们在上一章回中介绍了"如何获取当前系统语言"相关的内容&#xff0c;本章回中将介绍如何获取时间戳.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 我们在本章…...

程序员的README——编写可维护的代码(一)

用户行为不可预测&#xff0c;网络不可靠&#xff0c;事情总会出错。生产环境下的软件必须一直保持可用状态。 编写可维护的代码有助于你应对不可预见的情况&#xff0c;可维护的代码有内置的保护、诊断和控制。 切记通过安全和有弹性的编码实践进行防御式编程来保护你的系统&a…...

数据库管理-第160期 Oracle Vector DB AI-11(20240312)

数据库管理160期 2024-03-12 数据库管理-第160期 Oracle Vector DB & AI-11&#xff08;20240312&#xff09;1 向量的函数操作to_vector()将vector转换为标准值vector_norm()vector_dimension_count()vector_dimension_format() 2 将向量转换为字符串或CLOBvector_seriali…...

(C++进阶)boost库笔记

目录 1、boost::function 1.1 概述 1.2 boost包装器和C11包装器对比 1.2、代码示例 1、boost::function 1.1 概述 boost::function 是 Boost 库中提供的一个通用函数对象包装器&#xff0c;它可以存储指向任何可调用对象的指针&#xff0c;并且可以在任何时候通过 operat…...

MapReduce面试重点

文章目录 1. 简述MapReduce整个流程2. join原理 1. 简述MapReduce整个流程 数据划分(Input Splitting)&#xff1a;开始时&#xff0c;输入数据被分割成逻辑上的小块&#xff0c;每个块被称为Input Split。 映射(Map)&#xff1a;每个Input Split 由一个或多个Map任务处理&…...

C语言简单题(7)从主函数中输入10个等长字符串,用一个函数对他们排序,然后在主函数输出这10个已排好序的字符串

从主函数中输入10个等长字符串&#xff0c;用一个函数对他们排序&#xff0c;然后在主函数输出这10个已排好序的字符串 /* 从主函数中输入10个等长字符串&#xff0c;用一个函数对他们排序&#xff0c;然后在主函数输出这10个已排好序的字符串 */ #include<stdio.h> …...

光伏科普|太阳能光伏发电应用场景有哪些?

太阳能光伏发电的应用领域其实非常广泛&#xff0c;很多人会不相信&#xff0c;但在我们的日常生活中随处可见太阳能光伏产业&#xff0c;本文将详细介绍其应用场景有哪些。 一、工业领域厂房 太阳能光伏发电作为一种清洁、可再生的能源&#xff0c;安装在工业领域厂房&#…...

Go 构建高效的二叉搜索树联系簿

引言 树是一种重要的数据结构&#xff0c;而二叉搜索树&#xff08;BST&#xff09;则是树的一种常见形式。在本文中&#xff0c;我们将学习如何构建一个高效的二叉搜索树联系簿&#xff0c;以便快速插入、搜索和删除联系人信息。 介绍二叉搜索树 二叉搜索树是一种有序的二叉…...

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的交通信号灯识别系统(深度学习+UI界面+训练数据集+Python代码)

摘要&#xff1a;本研究详细介绍了一种采用深度学习技术的交通信号灯识别系统&#xff0c;该系统集成了最新的YOLOv8算法&#xff0c;并与YOLOv7、YOLOv6、YOLOv5等早期算法进行了性能评估对比。该系统能够在各种媒介——包括图像、视频文件、实时视频流及批量文件中——准确地…...

以太坊开发学习-solidity(三)函数类型

目录 函数类型 函数类型 solidity官方文档里把函数归到数值类型 函数类型是一种表示函数的类型。可以将一个函数赋值给另一个函数类型的变量&#xff0c; 也可以将一个函数作为参数进行传递&#xff0c;还能在函数调用中返回函数类型变量。 函数类型有两类&#xff1a;- 内部&…...

教你把公司吃干抹净、榨干带走

大家好&#xff1a; 衷心希望各位点赞。 您的问题请留在评论区&#xff0c;我会及时回答 正文 打工人一定要做到够自私&#xff0c;把公司的一切为我所用&#xff0c;你要知道闷头打工是没有出路的。聪明的人会以最快的速度榨干带走公司的一切资源、人脉、技能&#xff0c;为…...

开发指南007-导出Excel

平台上开发导出Excel比过去的单体架构要复杂些&#xff0c;因为前端和后台不在一个进程空间里。 后台的操作是先生成excel文件&#xff0c;技术路线是jxl <dependency><groupId>net.sourceforge.jexcelapi</groupId><artifactId>jxl</artifactId&g…...

滑块验证码

1.这里针对滑块验证给了一个封装的组件verifition&#xff0c;使用直接可以调用 2.组件目录 3.每个文件的内容 3.1 Api文件中只有一个index.js文件&#xff0c;用来存放获取滑块和校验滑块结果的api import request from /router/axios//获取验证图片 export function reqGe…...

cmd常用指令

cmd全称Command Prompt&#xff0c;中文译为命令提示符。 命令提示符是在操作系统中&#xff0c;提示进行命令输入的一种工作提示符。 在不同的操作系统环境下&#xff0c;命令提示符各不相同。 在windows环境下&#xff0c;命令行程序为cmd.exe&#xff0c;是一个32位的命令…...

【嵌入式DIY实例】-DIY手势识别和颜色识别(基于APDS9960)

DIY手势识别和颜色识别(基于APDS9960) 文章目录 DIY手势识别和颜色识别(基于APDS9960)1、硬件准备2、APDS9960 手势识别传感器介绍3、硬件接线4、代码实现4.1 手势识别4.2 颜色识别4.3 趋近感应代码5、综合实例代码在本文中,我们将介绍 APDS9960 手势、RGB 和接近传感器与…...

python 直方图

python可以调用hist方法绘制直方图。 import matplotlib.pyplot as plt import numpy as np; plt.rcParams["font.family"]["SimHei"] # 确保图中中文字体正确显示 x[0.1,0.2,0.3,0.4,0.5,0.6,0.1,0.2,0.2,0.2] plt.xlabel(满意程度) plt.ylabel(频数) …...

如何在数据库中使用sql语言插入数据

在SQL中&#xff0c;你可以使用INSERT INTO语句来添加数据到数据库表中。以下是一个基本示例&#xff0c;说明如何向表中插入数据&#xff1a; 假设你有一个名为students的表&#xff0c;它有以下字段&#xff1a;id, name, age 和 grade。 CREATE TABLE students ( id INT P…...

JVM的双亲委派模型和垃圾回收机制

jvm的作用是解释执行java字节码.java的跨平台就是靠jvm实现的.下面看看一个java程序的执行流程. 1. jvm中的内存区域划分 jvm也是一个进程,进程在运行过程中,要行操作系统申请一些资源.这些内存空间就支撑了后续java程序的执行. jvm从系统申请了一大块内存,这块内存在java程序使…...

ThreadLocal-内存泄露问题

ThreadLocal概述 ThreadLocal是多线程中对于解决线程安全的一个操作类&#xff0c;它会为每个线程都分配一个独立的线程副本从而解决了变量并发访问冲突的问题。ThreadLocal 同时实现了线程内的资源共享案例&#xff1a;使用JDBC操作数据库时&#xff0c;会将每一个线程的Conn…...

腾讯网页游戏排行榜/朝阳区seo搜索引擎优化怎么样

在Android系统中用来显示界面的组件&#xff08;Component&#xff09;为Activity&#xff0c;也就是说只有重写Activity的onKeyDown方法来监控/拦截/屏蔽系统的返回键&#xff08;back&#xff09;、菜单键&#xff08;Menu&#xff09;及Home键。 1、拦截/屏蔽返回键、菜单键…...

利用网站开发诈骗/sem账户托管公司

文章目录JavaAQS1. jvm调优思路2 JVM 调试实战 - 网站流量浏览量暴增后&#xff0c;网站反应页面响很慢3. synchronized实现原理3. Synchronized的可重入的实现机理4. JVM如何隔离线程&#xff1f;5. Java如何使用堆外内存6. volatile的作用&#xff1f;重排序的原理&#xff1…...

wordpress悬浮搜索/网络营销的优势和劣势

Python文本处理尝试 最近打算看CSAPP&#xff0c;GitHub上看到有英语字幕ass源文件&#xff0c;想把字幕提取出来提高学习效率&#xff0c;先把ass文件转成txt文件&#xff0c;发现是这样&#x1f447; 都在Dialogue的后面&#xff0c;打算尝试提取一下 不太熟练&#xff0c;下…...

江苏赛孚建设工程有限公司网站/商丘seo博客

2019独角兽企业重金招聘Python工程师标准>>> Perl中两种时间格式&#xff1a; 1、获取系统时间&#xff1a; yangyang :~$ perl -e print time() ,"\n" 1401806032 2、#格林尼治时间 yangyang :~$ perl -e print join("-",gmtime()) ,&qu…...

java开发做网站/房地产估价师考试

最近有人问我在家里怎么远程操控办公室内网的电脑。这让我回想起了很多年前用灰鸽子啊&#xff0c;Radmin等软件。但其实利用QQ也可以很轻松地在家里控制办公室的电脑&#xff0c;只需要一些简单的设置。简单点说就是把QQ远程连接设置为自动接受请求。QQ自动接受远程桌面设置方…...

外包网站建设公司/软文撰写公司

2019独角兽企业重金招聘Python工程师标准>>> 1、首先查看系统中原有的java版本&#xff1a;java -version;然后用再用&#xff1a;rpm -qa | grep java 命令查看具体的信息&#xff0c;最后用&#xff1a;rpm -e --nodeps java-1.5.0-gcj-1.5.0.0-29.1.el6.x86_64卸…...