第十四届蓝桥杯三月真题刷题训练——第 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)
- 最长公共子序列我们需要分别遍历字符串S1和字符串S2
- 遍历比较的时候只会出现两种情况:字符串相等或字符串不等
- 对应这两种状态分别给出两种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有类似的题目:
力扣https://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 题:送礼物
第十四届蓝桥杯三月真题刷题训练——第 23 天相关推荐
- 第十四届蓝桥杯三月真题刷题训练——第 13 天
目录 第 1 题:特殊日期 问题描述 答案提交 运行限制 代码: 思路: 第 2 题:重合次数 问题描述 答案提交 运行限制 代码: 第 3 题:左移右移 问题描述 输入格式 输出格式 样例输入 样例 ...
- 第十四届蓝桥杯三月真题刷题训练——第 9 天
第 1 题:找素数 题目描述 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可. 素数就是不能再进行等分的整数.比如:7,11.而 9 不是素数,因为它可以平分为 3 等份.一般 ...
- 第十四届蓝桥杯三月真题刷题训练——第 22 天
目录 第 1 题:受伤的皇后_dfs 题目描述 输入描述 输出描述 输入输出样例 运行限制 代码: 思路: 第 2 题:完全平方数 问题描述 输入格式 输出格式 样例输入 1 样例输出 1 样例输入 ...
- 第十四届蓝桥杯三月真题刷题训练——第 14 天
目录 第 1 题:组队 题目描述 运行限制 代码: 第 2 题:不同子串 题目描述 运行限制 代码: 思路: 第 3 题:等差数列 题目描述 输入描述 输出描述 输入输出样例 运行限制 代码: 思路: ...
- 第十四届蓝桥杯三月真题刷题训练——第 20 天
目录 第 1 题:纸张尺寸 问题描述 输入格式 输出格式 样例输入1 样例输出1 样例输入 2 样例输出 2 运行限制 代码: 解析: 第 2 题:最大数字 第 3 题:全排列的价值_递推公式 问题描 ...
- 第十四届蓝桥杯三月真题刷题训练——第 15 天
目录 第 1 题:斐波那契与7 问题描述 答案提交 运行限制 代码: 第 2 题:小蓝做实验 问题描述 答案提交 运行限制 代码: 第 1 题:斐波那契与7 问题描述 斐波那契数列的递推公式为: Fn ...
- 第十四届蓝桥杯三月真题刷题训练——第 21 天
目录 第 1 题:灭鼠先锋 问题描述 运行限制 代码: 思路: 第 2 题:小蓝与钥匙 问题描述 答案提交 运行限制 代码: 思路 : 第 3 题:李白打酒加强版 第 4 题:机房 第 1 题:灭鼠先 ...
- 第十四届蓝桥杯三月真题刷题训练——第 19 天
第 1 题:灌溉_BFS板子题 题目描述 小蓝负责花园的灌溉工作. 花园可以看成一个 n 行 m 列的方格图形.中间有一部分位置上安装有出水管. 小蓝可以控制一个按钮同时打开所有的出水管,打开时,有出 ...
- 第十四届蓝桥杯三月真题刷题训练——第 10 天
目录 第 1 题:裁纸刀 问题描述 运行限制 代码: 第 2 题:刷题统计 问题描述 输入格式 输出格式 样例输入 样例输出 评测用例规模与约定 运行限制 代码: 第 3 题:修建灌木 问题描述 输入 ...
最新文章
- 企业级java b2bc商城系统开源源码二次开发(二十一)springboot集成JMS
- NSArray和NSDictionary的混合
- 腾讯AI Lab涂兆鹏:如何提升神经网络翻译的忠实度 | PhD Talk #22
- mysql以下运算符的优先级顺序正确的是_MySQL 运算符
- mysql数据库事务传播特性_什么是事务的传播特性?
- 除了国内红海拼刀,移动 App 在海外能否挖到新机会?
- python画散点图-python画时间序列散点图
- 2022-07-25
- python-opencv-使图片更清晰的几种方法
- Grub4Dos 学习笔记
- 国家开放大学《国际经济法》第二章 国际货物买卖法 边学边练
- FPGA三大串行通信接口之UART
- python正则匹配任意字符_Python 正则表达式 匹配任意字符的写法
- oracle 主键、唯一键值、唯一索引关系
- TCP创建多人聊天室
- 怎么知道自己适合做什么?
- 【chatgpt代码系列】激光定位激光与地图匹配置信度算法
- 苹果切换输入法_轻松搞定缅甸语手机输入法(苹果篇)
- 如何用vb播放幻灯片
- House Carpenter
热门文章
- vue-router导航守卫
- 评论:华为与IBM员工考核体系的差别
- 基本概念-有源滤波器vs无源滤波器
- iOS_TUTK_多台设备同时连线卡UI问题
- VisualGDB使用SSH连接远程Linux服务器运行调试Linux工程
- jsqlparser 简介、中文文档、中英对照文档 下载
- win10录屏怎么用_怎么用U盘重装win10系统
- HDU-1276 士兵队列训练问题
- MediaCodec 实现硬件解码
- 【智能CAN/串口转换器提供“透明转换、透明带标识转换和自定义协议转换”三种转换模式介绍、CAN转换器、CAN 485、CAN 232】