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

目录

第 1 题:长草

题目描述

输入描述

输出描述

输入输出样例

运行限制

代码:

思路:

第 2 题:蓝肽子序列_LCS_最长公共子序列dp问题

题目描述

输入描述

输出描述

输入输出样例

运行限制

代码:

思路:

第 3 题:迷宫与陷阱

第 4 题:送礼物


第 1 题:长草

题目描述

小明有一块空地,他将这块空地划分为 n 行 m 列的小块,每行和每列的长度都为 1。

小明选了其中的一些小块空地,种上了草,其他小块仍然保持是空地。

这些草长得很快,每个月,草都会向外长出一些,如果一个小块种了草,则它将向自己的上、下、左、右四小块空地扩展,

这四小块空地都将变为有草的小块。请告诉小明,k 个月后空地上哪些地方有草。

输入描述

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

接下来 n 行,每行包含 m 个字母,表示初始的空地状态,字母之间没有空格。如果为小数点,表示为空地,如果字母为 g,表示种了草。

接下来包含一个整数 k。 其中,2≤n,m≤1000,1≤k≤1000。

输出描述

输出 n 行,每行包含 m 个字母,表示 k 个月后空地的状态。如果为小数点,表示为空地,如果字母为 g,表示长了草。

输入输出样例

示例

输入

4 5
.g...
.....
..g..
.....
2

输出

gggg.
gggg.
ggggg
.ggg.

运行限制

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

代码:

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

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

/**
 * @author yx
 * @date 2023-03-26 19:37
 */
public class 长草__BFS {
    static PrintWriter out =new PrintWriter(System.out);
    static BufferedReader ins=new BufferedReader(new InputStreamReader(System.in));
    static StreamTokenizer in=new StreamTokenizer(ins);
    static int[] X=new int[]{0,0,-1,1};
    static int[] Y=new int[]{1,-1,0,0};
    /**
     * 输入
     * 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 {
        String[] sp=ins.readLine().split(" ");
        int n=Integer.parseInt(sp[0]);
        int m=Integer.parseInt(sp[1]);
        String[][]map=new String[n][m];
        boolean[][] isTrue=new boolean[n][m];
        Queue<int[]> queue=new LinkedList<>();
        for (int i = 0; i < n; i++) {
            map[i]=ins.readLine().split("");
            for (int j = 0; j < m; j++) {
                if(map[i][j].equals("g")){
//                    System.out.println(i+" "+j);
                    queue.offer(new int[]{i,j});
                    isTrue[i][j]=true;
                }
            }
        }
        int K=Integer.parseInt(ins.readLine());
//        in.nextToken();
//        int K=(int) in.nval;
        int i=0;
        while (i<K){
            i++;
            int length=queue.size();
            for (int l = 0; l < length; l++) {
                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];
                    if (newX < n && newY < m && newX >= 0 && newY >= 0 && !isTrue[newX][newY] && map[newX][newY].equals(".")) {
                        map[newX][newY] = "g";
//                        System.out.println(newX + " " + newY);
                        isTrue[newX][newY]=true;
                        queue.offer(new int[]{newX, newY});
                    }
                }
            }
        }
        /*
        这个地方out.flush放在最后
        不然输出会超时
        频繁的使用out.flush也会有开销
         */
//        for (int j = 0; j < n; j++) {
//            for (int k = 0; k < m; k++) {
//                out.print(map[j][k]);
//            }
//            out.println();
//        }
//            out.flush();
        for (int j = 0; j < n; j++) {
            for (int k = 0; k < m; k++) {
                System.out.print(map[j][k]);
            }
            System.out.println();
        }
    }
}

思路:

这题没啥好讲的,裸bfs板子,跟day19的灌溉一模一样

第十四届蓝桥杯三月真题刷题训练——第 19 天_小羊不会飞的博客-CSDN博客第 1 题:灌溉第 2 题:小朋友崇拜圈第 3 题:括号序列第 4 题:砍竹子 题解链接:砍竹子题解https://blog.csdn.net/m0_55858611/article/details/129701723?spm=1001.2014.3001.5501

第 2 题:蓝肽子序列_LCS_最长公共子序列dp问题

题目描述

L 星球上的生物由蛋蓝质组成,每一种蛋蓝质由一类称为蓝肽的物资首尾连接成一条长链后折叠而成。

生物学家小乔正在研究 L 星球上的蛋蓝质。她拿到两个蛋蓝质的蓝肽序列,想通过这两条蓝肽序列的共同特点来分析两种蛋蓝质的相似性。

具体的,一个蓝肽可以使用 1 至 5 个英文字母表示,其中第一个字母大写,后面的字母小写。一个蛋蓝质的蓝肽序列可以用蓝肽的表示顺序拼接而成。

在一条蓝肽序列中,如果选取其中的一些位置,把这些位置的蓝肽取出,并按照它们在原序列中的位置摆放,则称为这条蓝肽的一个子序列。蓝肽的子序列不一定在原序列中是连续的,中间可能间隔着一些未被取出的蓝肽。

如果第一条蓝肽序列可以取出一个子序列与第二条蓝肽序列中取出的某个子序列相等,则称为一个公共蓝肽子序列。

给定两条蓝肽序列,找出他们最长的那个公共蓝肽子序列的长度。

输入描述

输入两行,每行包含一个字符串,表示一个蓝肽序列。字符串中间没有空格等分隔字符。

其中有 ,两个字符串的长度均不超过 1000。

输出描述

输出一个整数,表示最长的那个公共蓝肽子序列的长度。

输入输出样例

示例

输入

LanQiaoBei
LanTaiXiaoQiao

输出

2

运行限制

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

代码:

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

import java.io.*;
import java.util.ArrayList;
import java.util.HashMap;

/**
 * @author yx
 * @date 2023-03-26 20:31
 */
public class 蓝肽子序列 {
    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 {
        String s1=ins.readLine();
        String s2=ins.readLine();
        char[] arr1=s1.toCharArray();
        char[] arr2=s2.toCharArray();
        int length1=s1.length();
        int length2=s2.length();
        int temp1=0;
        int temp2=0;
        ArrayList<String>list1=new ArrayList<>();
        ArrayList<String>list2=new ArrayList<>();
        for (int i = 1; i < length1; i++) {
            if(arr1[i]>='A'&&arr1[i]<='Z'){
                list1.add(s1.substring(temp1,i));
                temp1=i;
                //最后一个单词为大写的情况
                if(i==length1-1){
                    list1.add(arr1[i]+"");
                }
            }else if(i==length1-1){
                list1.add(s1.substring(temp1,length1));
            }
        }
        for (int i = 1; i < length2; i++) {
            if(arr2[i]>='A'&&arr2[i]<='Z'){
                list2.add(s2.substring(temp2,i));
                temp2=i;
                //最后一个单词为大写的情况
                if(i==length2-1){
                    list2.add(arr2[i]+"");
                }
            }else if(i==length2-1){
                list2.add(s2.substring(temp2,length2));
            }
        }
        int size1=list1.size();
        int size2=list2.size();
        int[][] dp=new int[size1+1][size2+1];
        for (int i = 0; i <size1 ; i++) {
            System.out.print(list1.get(i)+" ");
        }
        for (int j = 0; j < size2; j++) {
            System.out.print(list2.get(j)+" ");
        }
        for (int i = 1; i <= size1 ; i++) {
            for (int j = 1; j <= size2 ; j++) {
                if(list1.get(i-1).equals(list2.get(j-1))){
                    dp[i][j]=dp[i-1][j-1]+1;
                }else {
                    dp[i][j]=Math.max(dp[i][j-1],dp[i-1][j]);
                }
            }
        }
        out.println(dp[size1][size2]);
        out.flush();
    }
}

思路:

这道题目考察两个点:

(1)字符串切割(存储每个以大写字母为开头的单词)

(2)最长公共子序列问题(LCS)

  1. 最长公共子序列我们需要分别遍历字符串S1和字符串S2
  2. 遍历比较的时候只会出现两种情况:字符串相等或字符串不等
  3. 对应这两种状态分别给出两种dp状态转移方程:
  • 相等:dp[i][j]=dp[i-1][j-1]+1
  • 不相等:dp[i][j]=max(dp[i-1][j],dp[i][j-1])
  • dp[i][j]的表示含义:字符串S1的前i个字符和字符串S2的前j个字符可以构成最长公共子序列为:dp[i][j]

关于最长公共子序列,leetcode有类似的题目:

力扣icon-default.png?t=N2N8https://leetcode.cn/problems/longest-common-subsequence/一个LCS讲的非常不错的B站视频:

包教包会~最长公共子序列_哔哩哔哩_bilibili-, 视频播放量 16998、弹幕量 66、点赞数 638、投硬币枚数 491、收藏人数 506、转发人数 150, 视频作者 81895507389_bili, 作者简介 ,相关视频:[轻松掌握动态规划]5.最长公共子序列 LCS,最长公共子序列,LCS, 一看就头疼,它真的有这么难懂吗?,06序列类dp-多序列问题-最长公共子序列,最长公共子序列 - 动态规划 Longest Common Subsequence - Dynamic Programming,最长公共子序列与最长公共子串问题,LeetCode1940题排序数组之间的最长公共子序列,LeetCode1143-最长公共子序列-代码随想录11.29,DP最长公共子序列详细版本(LCS),【动态规划】最长公共子序列 I,动态规划 最长公共子串 全网最详讲解教程https://www.bilibili.com/video/BV1S3411e7C8/?spm_id_from=333.337.search-card.all.click&vd_source=eb072ba6b610daa77b0adfe79fcc5879

第 3 题:迷宫与陷阱

第 4 题:送礼物

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

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

相关文章

Spring源码面试最难问题——循环依赖

前言 问&#xff1a;Spring 如何解决循环依赖&#xff1f; 答&#xff1a;Spring 通过提前曝光机制&#xff0c;利用三级缓存解决循环依赖&#xff08;这原理还是挺简单的&#xff0c;参考&#xff1a;三级缓存、图解循环依赖原理&#xff09; 再问&#xff1a;Spring 通过提前…

【前沿技术】问答pk【ChatGPT Vs Notion AI Vs BAT AI 】

目录 写在前面 问题&#xff1a; 1 ChatGPT 1.1 截图 ​1.2 文字版 2 Notion AI 2.1 截图 2.2 文字版 3 BAT AI 3.1 截图 3.2 文字版 总结 序言 所有幸运和巧合的事&#xff0c;要么是上天注定&#xff0c;要么是一个人偷偷的在努力。 突发奇想&#xff0c;问三个…

③【Java组】蓝桥杯省赛真题 持续更新中...

个人简介&#xff1a;Java领域新星创作者&#xff1b;阿里云技术博主、星级博主、专家博主&#xff1b;正在Java学习的路上摸爬滚打&#xff0c;记录学习的过程~ 个人主页&#xff1a;.29.的博客 学习社区&#xff1a;进去逛一逛~ 蓝桥杯真题--持续更新中...一、错误票据题目描…

CCF-CSP认证 202303 500分题解

202303-1 田地丈量&#xff08;矩阵面积交&#xff09; 矩阵面积交x轴线段交长度*y轴线段交长度 线段交长度&#xff0c;相交的时候是min右端点-max左端点&#xff0c;不相交的时候是0 #include<bits/stdc.h> using namespace std; int n,a,b,ans,x,y,x2,y2; int f(in…

用CSS3画了一只猫

感觉我写得技术含量不高&#xff0c;全都是用绝对定位写的&#xff0c;一定会有更好的&#xff0c;代码量更少的做法吧 <!DOCTYPE html> <html> <head><title>Cute Cat</title><style type"text/css">*{box-sizing: border-box…

100天精通Python(可视化篇)——第81天:matplotlib绘制不同种类炫酷饼图参数说明+代码实战(自定义、百分比、多个子图、圆环、嵌套饼图)

文章目录专栏导读0. 前言1. 参数说明2. 普通饼图3. 百分比饼图4. 突出某一块的饼图5. 自定义颜色的饼图6. 多个子图7. 圆环饼图8. 圆环分离饼图9. 饼图圆环图组合10. 多层圆环饼图专栏导读 &#x1f525;&#x1f525;本文已收录于《100天精通Python从入门到就业》&#xff1a…

【VScode】远程连接Linux

目录标题1. 安装扩展插件2. 在Linux上操作3. 确定Linux的IP地址4. 远程连接到Linux5. 实现免密码登录使用 VScode 远程编程与调试的时有会用到插件 Remote Development&#xff0c;使用这个插件可以在很多情况下代替 vim 直接远程修改与调试服务器上的代码&#xff0c;同时具备…

超详细讲解C语言文件操作!!

超详细讲解C语言文件操作&#xff01;&#xff01;什么是文件文件名文件的打开和关闭文件指针文件的打开和关闭文件的顺序读写文件的随机读写fseekftellrewind文本文件和二进制文件文件读取结束的判定文件缓冲区什么是文件 磁盘上的文件是文件。但是在程序设计中&#xff0c;我…

Python | 蓝桥杯系列文章总结+经典例题重做

欢迎交流学习~~ 专栏&#xff1a; 蓝桥杯Python组刷题日寄 从 4 个月前开始写蓝桥杯系列&#xff0c;到目前为止一共是 19 篇&#xff0c;其中&#xff1a;入门篇 5 篇&#xff0c;简单篇 8 篇&#xff0c;进阶篇 6 篇。 这篇文章主要是为了为先前内容进行总结&#xff0c;并对…

蓝桥杯冲刺 - Lastweek - 你离省一仅剩一步之遥!!!(掌握【DP】冲刺国赛)

文章目录&#x1f4ac;前言&#x1f3af;week3&#x1f332;day10-1背包完全背包多重背包多重背包 II分组背包&#x1f332;day2数字三角形 - 线性DP1015. 摘花生 - 数字三角形&#x1f332;day3最长上升子序列 - 线性DP1017. 怪盗基德的滑翔翼 - LIS1014.登山 - LIS最长公共子…

【JaveEE】多线程之阻塞队列(BlockingQueue)

目录 1.了解阻塞队列 2.生产者消费者模型又是什么&#xff1f; 2.1生产者消费者模型的优点 2.1.1降低服务器与服务器之间耦合度 2.1.2“削峰填谷”平衡消费者和生产的处理能力 3.标准库中的阻塞队列&#xff08;BlockingQueue&#xff09; 3.1基于标准库&#xff08;Bloc…

笔记本只使用Linux是什么体验?

个人主页&#xff1a;董哥聊技术我是董哥&#xff0c;嵌入式领域新星创作者创作理念&#xff1a;专注分享高质量嵌入式文章&#xff0c;让大家读有所得&#xff01;近期&#xff0c;也有朋友问我&#xff0c;笔记本只安装Linux怎么样&#xff0c;刚好我也借此来表达一下我的感受…

数据结构MySQL —— 索引

目录 一、索引概述 二、索引结构 三、索引分类 四、索引语法 五、SQL性能分析 1. 查看执行频次 2. 慢查询日志 3. show profiles指令 4. explain执行计划 六、索引使用规则 1. 验证索引效率 2. 最左前缀法则 3. 范围查询 4. 索引失效情况 5. SQL提示 6. …

【C++】AVL树

文章目录一、什么是 AVL 树二、AVL 树的节点结构三、AVL 树的插入四、AVL 树的旋转1、左单旋2、右单旋3、左右双旋4、右左双旋5、总结五、VAL 树的验证六、AVL 树的删除七、AVL 树的性能八、AVL 树的代码实现一、什么是 AVL 树 我们在前面学习二叉搜索树时提到&#xff0c;二叉…

【linux】深入了解TCP与UDP

认识端口号 端口号(port)是传输层协议的内容. 端口号是一个2字节16位的整数; 端口号用来标识一个进程, 告诉操作系统, 当前的这个数据要交给哪一个进程来处理; IP地址 端口号能够标识网络上的某一台主机的某一个进程; 一个端口号只能被一个进程占用理解 "端口号" 和…

【Java 并发编程】一文详解 Java 中有几种创建线程的方式

Java 中有几种创建线程的方式?1. Java 程序天然就是多线程的2. 线程的启动与终止2.1 线程的启动&#xff08;1&#xff09;继承 Thread 类&#xff0c;重写 run() 方法&#xff08;2&#xff09;实现 Runnable 接口&#xff0c;重写 run() 方法&#xff08;3&#xff09;Threa…

jwt 学习笔记

概述 JWT&#xff0c;Java Web Token&#xff0c;通过 JSON 形式作为 Web 应用中的令牌&#xff0c;用于在各方之间安全地将信息作为 JSON 对象传输&#xff0c;在数据传输过程中还可以完成数据加密、签名等相关处理 JWT 的作用如下&#xff1a; 授权&#xff1a;一旦用户登…

初识操作系统

目录 1.操作系统是什么 2.为什么要有操作系统 3.操作系统的相关关系 1.驱动程序 2.系统调用接口 3.用户调用接口 4.用户程序 4.用具体的例子理解操作系统 1.操作系统是什么 &#xff08;1&#xff09;操作系统是一组管理计算机硬件与软件资源的计算机软件程序 。 &#xff08;…

STM32入门教程课程简介(B站江科大自化协学习记录)

课程简介 STM32最小系统板面包板硬件平台 硬件设备 STM32面包板入门套件 Windows电脑 万用表、示波器、镊子、剪刀等 软件介绍 Keil MDK 5.24.1 是一款嵌入式软件开发工具&#xff0c;它提供了一个完整的开发环境&#xff0c;包括编译器、调试器和仿真器。它支持各种微控制…

浅谈Dubbo的异步调用

之前简单写了一下dubbo线程模型&#xff0c;提到了Dubbo底层是基于NIO的Netty框架实现的&#xff0c;通过IO线程池和Work线程池实现了请求和业务处理之间的异步从而提升性能。 这篇文章要写的是Dubbo对于消费端调用和服务端接口业务逻辑处理的异步&#xff0c;在2.7版本中Dubb…