第十四届蓝桥杯三月真题刷题训练——第 3 天
目录
题目1:门牌制作
题目描述
运行限制
代码:
题目2:货物摆放_long
题目描述
答案提交
运行限制
代码:
题目3:跳跃_dp
题目描述
输入描述
输出描述
输入输出样例
运行限制
代码:
题目4:重新排序_差分数组
问题描述
输入格式
输出格式
样例输入
样例输出
样例说明
评测用例规模与约定
运行限制
未满分代码:
差分数组满分代码:
题目1:门牌制作
题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
小蓝要为一条街的住户制作门牌号。
这条街一共有 2020 位住户,门牌号从 1 到 2020 编号。
小蓝制作门牌的方法是先制作 0 到 9 这几个数字字符,最后根据需要将字符粘贴到门牌上,例如门牌 1017 需要依次粘贴字符 1、0、1、7,即需要 1 个字符 0,2 个字符 1,1 个字符 7。
请问要制作所有的 1 到 2020 号门牌,总共需要多少个字符 2?
运行限制
- 最大运行时间:1s
- 最大运行内存: 128M
代码:
package 第十四届蓝桥杯三月真题刷题训练.day3;import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.io.StreamTokenizer;/*** @author yx* @date 2023-03-06 8:36*/
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();*/public static void main(String[] args) {int sum=0;for (int i = 1; i <= 2020 ; i++) {sum+=numberTwo(i);}System.out.println(sum);}static int numberTwo(int n){int temp=0;while (n!=0){if(n%10==2){temp++;}n/=10;}return temp;}
}
题目2:货物摆放_long
题目描述
小蓝有一个超大的仓库,可以摆放很多货物。
现在,小蓝有 n 箱货物要摆放在仓库,每箱货物都是规则的正方体。小蓝规定了长、宽、高三个互相垂直的方向,每箱货物的边都必须严格平行于长、宽、高。
小蓝希望所有的货物最终摆成一个大的长方体。即在长、宽、高的方向上分别堆 L、W、H 的货物,满足 n=L×W×H。
给定 nn,请问有多少种堆放货物的方案满足要求。
例如,当 n=4 时,有以下 6 种方案:1×1×4、1×2×2、1×4×1、2×1×2、2×2×1、4×1×1
请问,当 n=2021041820210418 (注意有 16 位数字)时,总共有多少种方案?
提示:建议使用计算机编程解决问题。
答案提交
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
运行限制
- 最大运行时间:1s
- 最大运行内存: 256M
代码:
package 第十四届蓝桥杯三月真题刷题训练.day3;import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.io.StreamTokenizer;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.Scanner;/*** @author yx* @date 2023-03-06 8:43*/
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();*/
// long类型是64位的也就是 ”-2^64“ 到”2^64 -1“public static void main(String[] args) {Scanner scanner = new Scanner(System.in);long n=scanner.nextLong();HashSet<Long> set=new HashSet<>();long ans=0;for (long i = 1; i <= (long)Math.sqrt(n) ; i++) {if(n%i==0){set.add(i);set.add(n/i);}}ArrayList<Long> list=new ArrayList<>(set);Collections.sort(list);int length=list.size();for (int i = 0; i <length ; i++) {for (int j = 0; j <length ; j++) {for (int k = 0; k <length ; k++) {if(list.get(i)* list.get(j)*list.get(k)==n){ans++;}}}}System.out.println(ans);}
}

题目3:跳跃_dp
题目描述
小蓝在一个 nn 行 mm 列的方格图中玩一个游戏。
开始时,小蓝站在方格图的左上角,即第 11 行第 11 列。
小蓝可以在方格图上走动,走动时,如果当前在第 rr 行第 cc 列,他不能走到行号比 rr 小的行,也不能走到列号比 cc 小的列。同时,他一步走的直线距离不超过 33。
例如,如果当前小蓝在第 33 行第 55 列,他下一步可以走到第 33 行第 66 列、第 33 行第 77 列、第 33 行第 88 列、第 44 行第 55 列、第 44 行第 66 列、第 44 行第 77 列、第 55 行第 55 列、第 55 行第 66 列、第 66 行第 55 列之一。
小蓝最终要走到第 nn 行第 mm 列。
在图中,有的位置有奖励,走上去即可获得,有的位置有惩罚,走上去就要接受惩罚。奖励和惩罚最终抽象成一个权值,奖励为正,惩罚为负。
小蓝希望,从第 11 行第 11 列走到第 nn 行第 mm 列后,总的权值和最大。请问最大是多少?
输入描述
输入的第一行包含两个整数 n,m,表示图的大小。
接下来 n 行,每行 m 个整数,表示方格图中每个点的权值。
其中,1≤n≤100,−104≤权值≤104
输出描述
输出一个整数,表示最大权值和。
输入输出样例
示例 1
输入
3 5 -4 -5 -10 -3 1 7 5 -9 3 -10 10 -2 6 -10 -4输出
15运行限制
- 最大运行时间:1s
- 最大运行内存: 128M
代码:
package 第十四届蓝桥杯三月真题刷题训练.day3;import java.io.*;
import java.util.Arrays;
import java.util.Scanner;/*** @author yx* @date 2023-03-06 9:22*/
public class 跳跃_dp {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();*/public static void main(String[] args) throws IOException {Scanner scanner = new Scanner(System.in);int[] newX={-1,-2,-3,0,0,0,-1,-2,-1};//X操作int[] newY={0,0,0,-1,-2,-3,-1,-1,-2};//Y操作int m=scanner.nextInt();int n=scanner.nextInt();int dp[][]=new int[m][n];int nums[][]=new int[m][n];for (int i = 0; i <m ; i++) {for (int j = 0; j < n; j++) {nums[i][j]=scanner.nextInt();}}for (int i = 0; i < m; i++) {Arrays.fill(dp[i],Integer.MIN_VALUE);//赋值成最小值,也就是-int(-2*10^9)}dp[0][0]=nums[0][0];for (int i = 0; i < m; i++) {for (int j = 0; j < n; j++) {for (int k = 0; k < newX.length; k++) {if (i + newX[k] >= 0 && j + newY[k] >= 0) {//设置数组界限//采用逆向思维,这个点的最大值等于Max(这一步的dp值,上一步的dp值+这个点的nums值)dp[i][j] = Math.max(dp[i][j], nums[i][j] + dp[i+newX[k]][j+newY[k]]);//更新dp数组的最大值}}}}System.out.println(dp[m-1][n-1]);}
}

题目4:重新排序_差分数组
问题描述
给定一个数组 A 和一些查询 Li,Ri 求数组中第 Li 至第 Ri个元素之和。
小蓝觉得这个问题很无聊, 于是他想重新排列一下数组, 使得最终每个查询结果的和尽可能地大。小蓝想知道相比原数组, 所有查询结果的总和最多可以增加多少?
输入格式
输入第一行包含一个整数 n 。
第二行包含 n 个整数 A1,A2,⋯ ,An相邻两个整数之间用一个空格分隔。
第三行包含一个整数 m 表示查询的数目。
接下来 m 行, 每行包含两个整数 Li、Ri相邻两个整数之间用一个空格分 隔。
输出格式
输出一行包含一个整数表示答案。
样例输入
5 1 2 3 4 5 2 1 3 2 5样例输出
4样例说明
原来的和为 6+14=20, 重新排列为 (1,4,5,2,3) 后和为 10+14=24, 增加了4。
评测用例规模与约定
对于 30%的评测用例, n,m≤50
对于 50%的评测用例, n,m≤500
对于 70% 的评测用例, n,m≤5000
对于所有评测用例, 1≤n,m≤105,1≤Ai≤106,1≤Li≤Ri≤106。
运行限制
- 最大运行时间:1s
- 最大运行内存: 512M
未满分代码:
package 第十四届蓝桥杯三月真题刷题训练.day3;import java.io.*;
import java.util.Arrays;/*** @author yx* @date 2023-03-06 10:08*/
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();*/
/*十年IO一场空,不开long long见祖宗*/
// 非常棒的博客思路:https://blog.csdn.net/qq_42487122/article/details/124081313public static void main(String[] args) throws IOException {
// Scanner scanner = new Scanner(System.in);in.nextToken();
// int n=scanner.nextInt();int n=(int) in.nval;long[] num=new long[n+1];long[] nums1=new long[n+1];long[] chaFen=new long[n+1];long sum1=0;//原始和long sum2=0;//更新和String[] s1=ins.readLine().split(" ");for (int i = 1; i <=n ; i++) {
// in.nextToken();
// nums1[i]=scanner.nextInt();
// nums1[i]=(int)in.nval;num[i]=Integer.parseInt(s1[i-1]);nums1[i]=nums1[i-1]+num[i];}in.nextToken();
// int m=scanner.nextInt();int m=(int) in.nval;for (int i = 0; i < m; i++) {String[] s2=ins.readLine().split(" ");
// in.nextToken();int l =scanner.nextInt();
// int l=(int) in.nval;int r =scanner.nextInt();
// in.nextToken();
// int r=(int) in.nval;int l=Integer.parseInt(s2[0]);int r=Integer.parseInt(s2[1]);sum1+=nums1[r]-nums1[l-1];if((r-l)%2==0){chaFen[(r+l)/2]++;}while (l<r){chaFen[l]++;chaFen[r]++;l++;r--;}}Arrays.sort(num);Arrays.sort(chaFen);for (int i = 1; i <= n; i++) {sum2 += chaFen[i]*num[i];//更新后的和}
// System.out.println(sum2-sum1);out.println(sum2-sum1);out.flush();}
}

差分数组满分代码:
关于差分:
- 因为我们确定从[l,r]区间,那么这个区间里面使用次数都+1
- 普通做法就是每个都+1,复杂度O(n*m)
- 通过前缀和,让l=1,r+1=-1,这样子就可以让[l,r]区间内的值统一+1
- 1 0 0 0 0 0 0 0 -1
前缀和为
1 1 1 1 1 1 1 1 0- 前缀和最后一个for循环计算即可,复杂度O(n+m)
- 复杂度从O(n*m)提升到O(m+n),解决最后两个点超时的问题
package 第十四届蓝桥杯三月真题刷题训练.day3;import java.io.*;
import java.util.Arrays;/*** @author yx* @date 2023-03-06 12:37*/
public class 重新排序_差分数组_100分 {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();*/
/*十年IO一场空,不开long long见祖宗*/
// 非常棒的博客思路:https://blog.csdn.net/qq_42487122/article/details/124081313static int N=100010;static long[] num=new long[N];static long[] nums1=new long[N];static long[] chaFen=new long[N];public static void main(String[] args) throws IOException {in.nextToken();int n=(int) in.nval;long sum1=0;//原始和long sum2=0;//更新和String[] s1=ins.readLine().split(" ");for (int i = 1; i <=n ; i++) {num[i]=Integer.parseInt(s1[i-1]);nums1[i]=nums1[i-1]+num[i];}in.nextToken();int m=(int) in.nval;for (int i = 0; i < m; i++) {String[] s2=ins.readLine().split(" ");int l=Integer.parseInt(s2[0]);int r=Integer.parseInt(s2[1]);sum1+=nums1[r]-nums1[l-1];//差分前缀和思想chaFen[l]++;//左端点+1chaFen[r+1]--;//右一端点-1}for (int i = 1; i <= n ; i++) {chaFen[i]+=chaFen[i-1];}Arrays.sort(num);Arrays.sort(chaFen);int p=N-1;while (chaFen[p]!=0){sum2 += chaFen[p]*num[p];//更新后的和p--;}out.println(sum2-sum1);out.flush();}
}

贴一个思路很棒的一篇博客,再结合差分就完美了
【2022年 第十三届蓝桥杯 Java】试题 G: 重新排序_蓝桥杯java排序_蒋丞选手!的博客-CSDN博客纪录一下昨天考场上“才思敏捷”的思路试题 G: 重新排序【问题描述】给定一个数组 A 和一些查询 L**i, R**i,求数组中第 L**i 至第 R**i 个元素之和。 小蓝觉得这个问题很无聊,于是他想重新排列一下数组,使得最终每个查询结果的和尽可能地大。小蓝想知道相比原数组,所有查询结果的总和最多可以增加多少?【输入格式】输入第一行包含一个整数 n。第二行包含 n 个整数 A1, A2, · · · , A**n,相邻两个整数之间用一个空格分隔。第三行包含一个整数 m 表示查
https://blog.csdn.net/qq_42487122/article/details/124081313
相关文章:
第十四届蓝桥杯三月真题刷题训练——第 3 天
目录 题目1:门牌制作 题目描述 运行限制 代码: 题目2:货物摆放_long 题目描述 答案提交 运行限制 代码: 题目3:跳跃_dp 题目描述 输入描述 输出描述 输入输出样例 运行限制 代码: 题目4&a…...
变量的四大存储类型static extern auto register
变量的四大存储类型static extern auto register外部变量(全局变量)extern----全局静态存储区定义 引用性声明❗易错点:函数之外未定义的变量一般是外部变量 extern全局变量 与 局部变量的区别‼️ 谨记:声明可以多次,…...
JavaScript基础五、语句
零、文章目录 文章地址 个人博客-CSDN地址:https://blog.csdn.net/liyou123456789个人博客-GiteePages:https://bluecusliyou.gitee.io/techlearn 代码仓库地址 Gitee:https://gitee.com/bluecusliyou/TechLearnGithub:https:…...
青龙面板399乐园
1.拉库 ql raw https://wjkjy.cn/wp-content/uploads/2023/03/1678104978-afaecb98a9df61e.js 2.抓包 7.26 399乐园 每天 七八毛左右 脚本已完成全部任务,自动提现 下载链接:https://3mao.lanzoul.com/izGDh084oogh 抓包链接 https://339.mhhuanyue.c…...
自动化注册组件
// components/index.js export default { install(app) { const req require.context(‘./’, false, /.vue$/) // console.log(req, ‘req’) req.keys().forEach((item) > { // console.log(item, ‘item’) const com req(item).default // console.log(com, ‘com’)…...
【JS代码优化一】分支优化篇
序:如何让代码看起来更优雅?代码是由文字堆叠起来的可以被机器执行的程序。它记载着相关信息(状态)、表达相关的情绪(函数),所以如何能够写出简洁、优雅、健壮、可维护性强的程序至关重要。本系…...
软件测试-接口测试-补充
文章目录 1.持续集成2. mock测试3.Fiddler 抓包工具3.1 弱网测试4. webservice1.持续集成 持续集成概念 重复执行开发提交代码并集成到主干; aim 加速产品迭代 好处 快速发现问题 避免分支大幅度偏离主干 加速产品发布 工具 git:源代码版本工具github:代码仓库jenkins:持续…...
Spring笔记(5):Beans自动装配
为什么需要使用自动装配 在通过XML配置文件进行设置Bean元素注入与声明注册后,我们能够发现一个问题,在项目中是会存在大量对象的,不可能全部都写在XML文件中,那会显得非常的臃肿,不利于后期维护,所以需要用…...
Spark+Vue+Springboot 协同过滤额音乐推荐大数据深度学习项目
一、项目背景 随着互联网的发展,大数据的到来,传统的音乐行业受到了很大的冲击,原有的音乐数字化给人们生活带来了极大的便利。随着数字音乐的兴起,各大音乐平台层出不穷,人们在音乐平台上收听音乐的时,常常因为歌曲信息繁杂,而不能找到自己想听的音乐。为了解决这个问题,音乐…...
JDBC的实现(IDEA版)
前期准备 开发环境: IDEA 2021.1.3 JAVA 1.8 MYSQL 8.0.32 msql用户名:root 密码:123 下载MySQL JDBC 驱动 前往MySQL官网下载对应版本的MySQL Connector/J驱动 (下载地址:https://dev.mysql.com/downloads/connector/j/ÿ…...
人员摔倒识别预警系统 人员跌倒检测算法 yolov7
人员摔倒识别预警系统 人员跌倒检测算法基于yolov7网络模型计算机识别技术,人员摔倒识别预警系统 人员跌倒检测算法对画面中人员摔倒进行实时检测识别抓拍告警。YOLOv7 的策略是使用组卷积来扩展计算块的通道和基数。研究者将对计算层的所有计算块应用相同的组参数和…...
Spring-Cloud-Gateway集成Nacos如何做负载均衡?
spring-cloud-alibaba的低版本 如果所用的SpringCloud和Nacos的版本信息如下: <spring-cloud.version>Hoxton.SR10</spring-cloud.version> <spring-cloud-alibaba.version>2.2.6.RELEASE</spring-cloud-alibaba.version>网关的依赖如下&…...
【数据挖掘与商务智能决策】第四章 逻辑回归模型
逻辑回归模型算法原理 逻辑回归模型的数学原理 %matplotlib inline# 补充知识点:Sigmoid函数绘制 import matplotlib.pyplot as plt import numpy as npx = np.linspace(-6, 6) # 通过linspace()函数生成-6到6的等差数列,默认50个数 y = 1.0...
滚动升级回滚
滚动升级回滚 ReplicationController 资源文件 apiVersion: v1 kind: ReplicationController metadata:name: kubia-v1labels:app: kubia spec:replicas: 3template:metadata:name: kubialabels:app: kubiaspec:containers:- image: luksa/kubia:v1name: nodejes --- apiVer…...
2023/3/6 VUE - 组件传值【通信】方式
1 父亲传子代传值【子代使用父代的数据】 1.1 props传值 父亲给儿子传值: 爷爷给孙子传值: 这个props传值的方式,只能一代一代的往下传,不能跨代传值。 有一个问题:子组件不能修改父组件的值: 1.2 …...
MedCalc v20.217 医学ROC曲线统计分析参考软件
MedCalc是一款医学 ROC 曲线统计软件,用于ROC曲线分析的参考软件,医学工作者设计的医学计算器,功能齐全。它可以帮助医生快速作出普通的医学计算,从而对症下药。提供超过76种常用的规则和方法,包括:病人数据、单位参数、费用计算等等。甚至可以将图形另存为BMP,PNG,GIF…...
欢乐消除开心假日协议解密
欢乐消除开心假日协议解密协/议/流/量/解/密分析欢乐消除开心假日这款游戏流量的协议加密方式。序欢乐消除开心假日是一款合成模拟家装的游戏,在这个游戏中,你将成为一位充满热情的设计师,与好友一起经营工作室。你需要根据客户的需求重新设计…...
Android Service知识
一. 概览 Service 是一种可在后台执行长时间运行操作而不提供界面的应用组件。服务可由其他应用组件启动,而且即使用户切换到其他应用,服务仍将在后台继续运行。此外,组件可通过绑定到服务与之进行交互,甚至是执行进程间通信 (IPC…...
axios的get请求传入数组参数后端无法接收的问题
问题描述 在做项目时,需要把前端的数组通过axios的get请求发送到后端处理,于是像这样直接发送: axios.get(url,{params:{arr: update_arr}})这时在后端接收后报错说:没有 ‘arr’ 这个key: arr request.GET[arr] pr…...
奖金发放-课后程序(Python程序开发案例教程-黑马程序员编著-第3章-课后作业)
实例2:奖金发放 某企业发放的奖金是根据利润和提成计算的,其规则如表1所示。 表1 奖金发放规则 利润(万元) 奖金提成(%) I≤10 10% 10<I≤20 7.5% 20<I≤20 5% 10…...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...
TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
测试markdown--肇兴
day1: 1、去程:7:04 --11:32高铁 高铁右转上售票大厅2楼,穿过候车厅下一楼,上大巴车 ¥10/人 **2、到达:**12点多到达寨子,买门票,美团/抖音:¥78人 3、中饭&a…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)
宇树机器人多姿态起立控制强化学习框架论文解析 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一) 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...
前端开发面试题总结-JavaScript篇(一)
文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包(Closure)?闭包有什么应用场景和潜在问题?2.解释 JavaScript 的作用域链(Scope Chain) 二、原型与继承3.原型链是什么?如何实现继承&a…...
全志A40i android7.1 调试信息打印串口由uart0改为uart3
一,概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本:2014.07; Kernel版本:Linux-3.10; 二,Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01),并让boo…...
保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek
文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama(有网络的电脑)2.2.3 安装Ollama(无网络的电脑)2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...
基于 TAPD 进行项目管理
起因 自己写了个小工具,仓库用的Github。之前在用markdown进行需求管理,现在随着功能的增加,感觉有点难以管理了,所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD,需要提供一个企业名新建一个项目&#…...
Qt 事件处理中 return 的深入解析
Qt 事件处理中 return 的深入解析 在 Qt 事件处理中,return 语句的使用是另一个关键概念,它与 event->accept()/event->ignore() 密切相关但作用不同。让我们详细分析一下它们之间的关系和工作原理。 核心区别:不同层级的事件处理 方…...
【C++】纯虚函数类外可以写实现吗?
1. 答案 先说答案,可以。 2.代码测试 .h头文件 #include <iostream> #include <string>// 抽象基类 class AbstractBase { public:AbstractBase() default;virtual ~AbstractBase() default; // 默认析构函数public:virtual int PureVirtualFunct…...

