第十四届蓝桥杯三月真题刷题训练——第 19 天

第 1 题:灌溉_BFS板子题

题目描述

小蓝负责花园的灌溉工作。

花园可以看成一个 n 行 m 列的方格图形。中间有一部分位置上安装有出水管。

小蓝可以控制一个按钮同时打开所有的出水管,打开时,有出水管的位置可以被认为已经灌溉好。

每经过一分钟,水就会向四面扩展一个方格,被扩展到的方格可以被认为已经灌溉好。即如果前一分钟某一个方格被灌溉好,则下一分钟它上下左右的四个方格也被灌溉好。

给定花园水管的位置,请问 k 分钟后,有多少个方格被灌溉好?

输入描述

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

第二行包含一个整数 t,表示出水管的数量。

接下来 t 行描述出水管的位置,其中第 i 行包含两个数 r,c 表示第 r 行第 c 列有一个排水管。

接下来一行包含一个整数 kk。

其中,1≤n,m≤100,1≤t≤10,1≤k≤100。

输出描述

输出一个整数,表示答案。

输入输出样例

示例 1

输入

3 6
2
2 2
3 4
1

输出

9

运行限制

  • 最大运行时间:1s
  • 最大运行内存: 128M

代码:

package 第十四届蓝桥杯三月真题刷题训练.day19;

import java.io.*;
import java.util.LinkedList;
import java.util.Queue;

/**
 * @author yx
 * @date 2023-03-22 8:29
 */
public class 灌溉_BFS模板题 {
    static int[] X = {0, 0, -1, 1};
    static int[] Y = {1, -1, 0, 0};
    static int[][] map;
    static int ans=0;//最后的输出答案
    static PrintWriter out = new PrintWriter(System.out);
    static BufferedReader ins = new BufferedReader(new InputStreamReader(System.in));
    static StreamTokenizer in = new StreamTokenizer(ins);

    /**
     * 输入
     * in.nextToken()
     * int a= (int)in.nval;
     * <p>
     * 输出
     * out.print();
     * out.flush();
     * <p>
     * 读文件:
     * BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("C:\\Users\\yx\\Desktop\\primes.txt")));
     * String s = br.readLine();s读取每一行数据
     * if (s == null)break;读取文件终止的语句
     **/
    public static void main(String[] args) throws IOException {
        in.nextToken();
        int n = (int) in.nval;
        in.nextToken();
        int m = (int) in.nval;
        in.nextToken();
        int t = (int) in.nval;
        //初始就有t个出水点
        ans=t;
        //存储出水管的(x,y)
        int[][] XY = new int[t][2];
        for (int i = 0; i < 2; i++) {
            String[] sp = ins.readLine().split(" ");
            XY[i][0] = Integer.parseInt(sp[0]);
            XY[i][1] = Integer.parseInt(sp[1]);
        }
        in.nextToken();
        int k = (int) in.nval;
        map = new int[n][m];
        //队列
        Queue<int[]> queue = new LinkedList<>();
        //对方格进行初始化
        for (int i = 0; i < t; i++) {
            map[XY[i][0] - 1][XY[i][1] - 1] = 1;
            //把洒水点入队
            queue.offer(new int[]{XY[i][0] - 1, XY[i][1] - 1});
        }
        //不能超出k次循环且队列不为空
        while (k > 0 && !queue.isEmpty()) {
            //k分钟,一个循环消耗一分钟
            k--;
            int length = queue.size();
            for (int i = 0; i < length; i++) {
                //出队
                int[] nums = queue.poll();
                int x = nums[0];
                int y = nums[1];
                //遍历四个方向
                for (int j = 0; j < 4; j++) {
                    int newX = x + X[j];
                    int newY = y + Y[j];
                    //m行n列
                    if (newX < n && newX >= 0 && newY < m && newY >= 0) {
                        if(map[newX][newY]==0){//表示当前位置没有洒水
                            ans++;
                            map[newX][newY]=1;//对该位置赋值
                            //把新洒水的位置入队
                            queue.offer(new int[]{newX,newY});
                        }
                    }
                }
            }
        }
        out.println(ans);
        out.flush();
    }
}

解析:

(1)这一题是一道经典的BFS板子题,几乎不需要对板子改变什么

(2)讲一下BFS搜索的几个要点:

  1. 初始化的一个二维数组Map
  2. 使用队列这一数据结构,将搜过的“老点”出队,将初始的“新点”入队
  3. 创建初始数组X={0,0,-1,1},Y={1,-1,0,0},每个点都要遍历一遍这个数组,表示可以往上下左右四个方向进行搜索
  4. 对新点要进行特判(数组越界、是否搜过....)这两个特判条件是最基本的,其它条件因题而异,比如可能会更加复杂一点(是否有障碍物......)

第 2 题:小朋友崇拜圈_暴搜

题目描述

班里 N 个小朋友,每个人都有自己最崇拜的一个小朋友(也可以是自己)。

在一个游戏中,需要小朋友坐一个圈,每个小朋友都有自己最崇拜的小朋友在他的右手边。

求满足条件的圈最大多少人?

小朋友编号为 1,2,3,⋯N。

输入描述

输入第一行,一个整数 N(3<N<10^5)。

接下来一行 N 个整数,由空格分开。

输出描述

要求输出一个整数,表示满足条件的最大圈的人数。

输入输出样例

示例

输入

9
3 4 2 5 3 8 4 6 9

输出

4

样例解释

如下图所示,崇拜关系用箭头表示,红色表示不在圈中。

显然,最大圈是[2 4 5 3] 构成的圈。

运行限制

  • 最大运行时间:1s
  • 最大运行内存: 256M

代码:

package 第十四届蓝桥杯三月真题刷题训练.day19;

import java.io.*;

/**
 * @author yx
 * @date 2023-03-22 9:46
 */
public class 小朋友崇拜圈_爆搜 {
    static int[] nums;
    static int max=0;
    static int N;
    static PrintWriter out =new PrintWriter(System.out);
    static BufferedReader ins=new BufferedReader(new InputStreamReader(System.in));
    static StreamTokenizer in=new StreamTokenizer(ins);
    /**
     * 输入
     * in.nextToken()
     * int a= (int)in.nval;
     *
     * 输出
     * out.print();
     * out.flush();
     *
     * 读文件:
     * BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("C:\\Users\\yx\\Desktop\\primes.txt")));
     * String s = br.readLine();s读取每一行数据
     * if (s == null)break;读取文件终止的语句
     **/

    public static void main(String[] args) throws IOException {
        in.nextToken();
        N=(int) in.nval;
        nums=new int[N+1];
        //初始化数据
        for (int i = 1; i <= N; i++) {
            in.nextToken();
            nums[i]=(int) in.nval;
        }
        for (int i = 1; i <= N; i++) {
            int length=dfs(i);
            if(max<length){
                max=length;
            }
        }
        out.println(max);
        out.flush();
    }
    static int dfs(int i){
        //初始往下走一个位置
        int key=nums[i];
        int length=1;
        //往下爆搜,直到起点等于终点为止
        while (key!=i){
            key=nums[key];
            length++;
            //进入死环,返回0
            if(length>N){
                return 0;
            }
        }
        return length;
    }
}

解析:

(1)首先我们先对数组进行初始化,每个数组里面的存储的是对应下标学号的偶像

(比如:nums[1]=3,表示学号为1的同学崇拜的对象是学号为3的对象)

(2)其次我们遍历每一个数组元素,对其进行爆搜,此时我们需要注意一种死环的情况,比如1-->2-->3-->2-->3......一直在2和3之间绕圈圈,并且这个时候1,2,3并不能构成一个环,并且无限死循环下去,所以针对这个我们要特判一下,就这个行代码

//进入死环,返回0
if(length>N){
return 0;
 }

第 3 题:括号序列

第 4 题:砍竹子     

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

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

相关文章

一文带你看懂电压放大器和功率放大器的区别

很多人对于电压放大器和功率放大器总是分不太清&#xff0c;在实际应用过程中&#xff0c;电压放大器和功率放大器所起到的作用都是相同的。对于功率放大器和电压放大器的区别&#xff0c;今天就让安泰电子来带我们一起看看。功率放大器和电压放大器的主要区别是&#xff1a;功…

花青染料Sulfo-Cyanine7 N3,Cy7 azide,Sulfo-Cy7 N3,用于点击化学的水溶NIR azide染料

●中文名&#xff1a;磺化花青素Cyanine7叠氮&#xff0c;磺化花青素Cy7叠氮●英文名&#xff1a;Sulfo-Cyanine7 azide&#xff0c;Sulfo-Cyanine7 N3&#xff0c;Sulfo-Cy7 azide&#xff0c;Sulfo-Cyanine7 N3【产品理化指标】&#xff1a;CAS号&#xff1a;N/A分子式&#…

应用层协议 HTTP HTTPS

目录 应用层 再谈 "协议" 序列化和反序列化 关于 json库 request序列化 request反序列化 response序列化 response反序列化 PS&#xff1a;命令宏 HTTP协议 认识URL urlencode和urldecode HTTP协议格式 HTTP请求 HTTP响应 请求方法 ​编辑 HT…

自动化测试学习(七)-正则表达式,你真的会用吗?

目录 一、正则表达式在python中如何使用 二、用正则表达式匹配更多模式 三、常用字符分类的缩写代码 总结 所谓正则表达式&#xff08;regex&#xff09;&#xff0c;就是一种模式匹配&#xff0c;学会用正则匹配&#xff0c;就可以达到事半功倍的效果。 一、正则表达式在…

幸福的烦恼:显卡算力太高而pytorch版本太低不支持

NVIDIA GeForce RTX 3090 with CUDA capability sm_86 is not compatible with the current PyTorch installation. The current PyTorch install supports CUDA capabilities sm_37 sm_50 sm_60 sm_70.写在最前面项目场景&#xff1a;问题描述原因分析&#xff1a;解决方案&am…

Linux(网络基础---数据链接层)

文章目录0. 前言1. 以太网的帧格式2. 再谈局域网原理3. 汇总整体通信流程&#xff0c;补全细节3-1 理解MAC地址和IP地址3-2 MTU1. 认识MTU2. MTU对IP协议的影响3. MTU对UDP协议的影响4. MTU对于TCP协议的影响3-3 ARP协议1. 基本概念2. ARP协议的作用3. ARP数据报的格式4. 简述a…

ChatGPT能够改变时代吗?一点点思考

都知道ChatGPT的出现对整个世界产生了剧烈的影响&#xff0c;前不久出的ChatGPT4更是在ChatGPT3.5的基础上展现了更强的功能。比如说同一个问题&#xff0c;ChatGPT3.5还是乱答的&#xff0c;ChatGPT4已经能给出正确解了。当然这只能说明技术是进步的。 虽然如此&#xff0c;很…

图像识别模型

一、数据准备 首先要做一些数据准备方面的工作&#xff1a;一是把数据集切分为训练集和验证集&#xff0c; 二是转换为tfrecord 格式。在data_prepare&#xff0f;文件夹中提供了会用到的数据集和代码。首先要将自己的数据集切分为训练集和验证集&#xff0c;训练集用于训练模型…

内存泄漏定位工具之 valgrind

内存泄漏检测工具 文章目录内存泄漏检测工具一、valgrind介绍1. memcheck2. cachegrind3. helgrind二、源码下载三、命令操作1.memcheck 工具四、虚拟机下使用1. x86编译2. 正常程序测试3. 申请内存不释放测试4. 内存越界的测试5. 读写已经释放的内存五、ARM平台使用1.交叉编译…

【web前端开发】CSS背景相关内容

文章目录背景颜色背景图片背景平铺背景位置background(复合属性)背景颜色 属性名:background-color 取值:表示颜色的取值都可以填写,如:rgb注意点: 背景颜色默认是透明的背景颜色不影响盒子的大小 实用技巧:在平时使用一些盒子时,可以给盒子设置背景颜色,这样可以看清盒子的…

网络编程套接字( TCP )

目录 1、实现一个TCP网络程序&#xff08;单进程版&#xff09; 1.1、服务端serverTcp.cc文件 服务端创建套接字 服务端绑定 服务端监听 服务端获取连接 服务端提供服务 服务端main函数命令行参数 服务端serverTcp.cc总代码 1.2、客户端clientTcp.cc文件 客户端main函数命令行…

Springboot Long类型数据太长返回给前端,精度丢失问题 复现、解决

前言 惯例&#xff0c;收到兄弟求救&#xff0c;关于long类型丢失精度的问题&#xff1a; 存在一个初学者不会&#xff0c;就会有第二个初学者不会&#xff0c;所以我出手。 正文 不多说&#xff0c;开搞。 如题&#xff0c; 后端返回的数据 给到 前端&#xff0c; Long类型数…

Flutter内阴影

前言 在前几天的业务需求中&#xff0c;UI给出的页面中有新拟态的按钮&#xff0c;就是带内部阴影的按钮&#xff0c;如果是利用css中box-shadow的属性&#xff0c;那么实现起来很简单&#xff0c;但是奈何Flutter中的Container的BoxShadow不具备inset内部阴影的功能&#xff…

【Linux内网穿透】使用SFTP工具快速实现内网穿透

文章目录内网穿透简介1. 查看地址2.局域网测试连接3.创建tcp隧道3.1. 安装cpolar4.远程访问5.固定TCP地址内网穿透简介 是一种通过公网将内网服务暴露出来的技术&#xff0c;可以使得内网服务可以被外网访问。以下是内网穿透的一些应用&#xff1a; 远程控制&#xff1a;通过内…

【头歌实验】课外作业一:开通ECS及使用Linux命令

文章目录一、完成下列实验并截图二、简要回答“课堂考核”内容三、在头歌、华为云或阿里云官网上&#xff0c;找出自己的课外学习资源&#xff0c;制定小组的课程学习计划、专业学习计划。四、习题1.10一、完成下列实验并截图 1、实验《ECS云服务器新手上路》 https://develo…

【LeetCode】1022. 从根到叶的二进制数之和、563. 二叉树的坡度

作者&#xff1a;小卢 专栏&#xff1a;《Leetcode》 喜欢的话&#xff1a;世间因为少年的挺身而出&#xff0c;而更加瑰丽。 ——《人民日报》 1022. 从根到叶的二进制数之和 1022. 从根到叶的二进制数之和 题目描述&#xff1a; 给出一…

OpenCV入门(十八)快速学会OpenCV 17 直线检测

OpenCV入门&#xff08;十八&#xff09;快速学会OpenCV 17 直线检测1.霍夫直线变换概述2.霍夫变换原理3.操作实例3.1 HoughLines函数3.2 HoughLinesP函数作者&#xff1a;Xiou 1.霍夫直线变换概述 霍夫变换是一种在图像中寻找直线、圆形以及其他简单形状的方法。霍夫变换采用…

HTML5庆祝生日蛋糕烟花特效

HTML5庆祝生日蛋糕烟花特效 <!DOCTYPE html> <html> <head><meta charset"UTF-8"><title>HTML5 Birthday Cake Fireworks</title><style>canvas {position: absolute;top: 0;left: 0;z-index: -1;}</style> </h…

css + js 超好看的消息提示

先看图 css 使用了layui&#xff0c;直接在官网下载引入即可 实现的功能 自定义消息弹出位置自定义消息类型自定义消息关闭时间消息弹出关闭动画 <style>.message {width: 300px;/* background-color: rgba(0, 0, 0, 0.2); */background-color: rgba(255, 255, 255…

Linux - 进程控制(创建和终止)

1.进程创建fork函数初识 在linux中fork函数时非常重要的函数&#xff0c;它从已存在进程中创建一个新进程。新进程为子进程&#xff0c;而原进程为父进程。返回值&#xff1a;子进程返回0&#xff0c;父进程返回子进程id&#xff0c;出错返回-1getpid()获取子进程id&#xff0c…