蓝桥杯真题05
重新排序
问题描述
给定一个数组 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=206+14=20, 重新排列为 (1,4,5,2,3)(1,4,5,2,3) 后和为 10+14=2410+14=24, 增 加了 4。
运行限制
- 最大运行时间:1s
- 最大运行内存: 512M
思路分析
要想排列前后差值最大,排列前的初始数组我们无法控制,那么就只能想办法改变排列后的数组,让最大的数放在位置出现最多次的地方,进一步来说就是,最大的数要出现最多次,然后依次递减数的大小和位置出现的次数,那么如何去判断哪个位置出现了多少次呢?
不妨定义一个count数组来表示,如果l,r这段被求一次,那么这一段区间内的出现次数就都需要+1,这不正是差分所能实现的吗,因此我们不妨每次count[l]++;count[r+1]--;然后进行差分操作,自然就将每个位置的出现次数计算出了,再将其排序,同时与排序过的原数组对应位置一一相乘,得到的值无疑是最大的,
为什么直接相乘就可以,
因为我们的count数组存的是位置出现次数,我们要求的让他是和最大的数相乘,而较小的那些数刚好会乘以count数组中的0,因此得到的值就是要求。
代码实现
package com.zxy.exam;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.Arrays;public class _重新排序 {static int N = 100010;static long[] arr = new long[N];//原数组static long[] count = new long[N];//位置出现次数static long[] b = new long[N];//前缀和数组static int n,m;static long sum1,sum2;static BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));static PrintWriter pw = new PrintWriter(System.out);public static void main(String[] args) throws IOException {String s = bf.readLine();n = Integer.parseInt(s);String[] s1 = bf.readLine().split(" ");for (int i = 1; i <= n; i++) {arr[i]=Integer.parseInt(s1[i-1]);//读入数据b[i]=b[i-1]+arr[i];//前缀和}s = bf.readLine();m = Integer.parseInt(s);while(m --> 0){String[] s2 = bf.readLine().split(" ");int l = Integer.parseInt(s2[0]);int r = Integer.parseInt(s2[1]);sum1+=b[r]-b[l-1];count[l]++;count[r+1]--;}for (int i = 1; i <= n; i++) {count[i]+=count[i-1];}Arrays.sort(arr);Arrays.sort(count);//count数组特别大,而且有很多0,因此一定要遍历到最后一位,或者就从最后一位倒着遍历/*int p=N-1;while (count[p]!=0){sum2 += count[p]*arr[p];//更新后的和p--;}*/for (int i = 1; i <= N-1; i++) {sum2+= count[i]*arr[i];}System.out.println(sum2-sum1);}
}
找素数
这道题目很简单找到第1000002个素数,但是素数是蓝桥杯的高频考点,一定要复习一下!
import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改public class Main {public static void main(String[] args) {int ans = 0;int i = 2;while(true){if (isPrime(i)){ans++;if(ans == 100002){System.out.println(i);return;}}i++;} }static boolean isPrime(int n) {for(int i = 2; i <= (int) Math.sqrt(n); i++){if (n % i == 0){return false;}}return true;}
}
卡牌
问题描述
这天, 小明在整理他的卡牌。
他一共有 n 种卡牌, 第 i 种卡牌上印有正整数数 i(i∈[1,n]), 且第 i 种卡牌 现有 ai 张。
而如果有 n 张卡牌, 其中每种卡牌各一张, 那么这 nn 张卡牌可以被称为一 套牌。小明为了凑出尽可能多套牌, 拿出了 m 张空白牌, 他可以在上面写上数 i, 将其当做第 i 种牌来凑出套牌。然而小明觉得手写的牌不太美观, 决定第 ii 种牌最多手写 bi 张。
请问小明最多能凑出多少套牌?
输入格式
输入共 3 行, 第一行为两个正整数 n,m。
第二行为 n 个正整数 a1,a2,…,an。
第三行为 n 个正整数 b1,b2,…,bn 。
输出格式
一行, 一个整数表示答案。
样例输入
4 5
1 2 3 4
5 5 5 5
样例输出
3
样例说明
这 5 张空白牌中, 拿 2 张写 1 , 拿 1 张写 2 , 这样每种牌的牌数就变为了 3,3,3,4, 可以凑出 3 套牌, 剩下 2 张空白牌不能再帮助小明凑出一套。
评测用例规模与约定
对于 30%的数据, 保证 n≤2000;
对于 100% 的数据, 保证 n≤2×105;ai,bi≤2*n;m≤n2 。
运行限制
最大运行时间:1s
最大运行内存: 512M
分析
很明显的二分题目,mid是可以凑出的套数,如果mid可以满足条件,也就是mid这个套数是可以实现的,那么比mid小的所有套数也一定是可以实现的,因此答案在mid-r中也就是l=mid。
另一个难点就是如何判断这个套数是否能实现,也即是check函数的写法,我们定义t为套数,还要定义tmp表示万能牌的数量,这里需要枚举每一种牌,如果t<=a[i]那么这种牌就可以实现,直接continue节省时间,如果t>a[i]+b[i]那么很明显,实现不了,如果t>a[i]+tmp那么也是实现不了的,那么剩下的就是a[i]配合万能牌可能实现t的情况了,t-a[i]<=tmp那么我们的万能拍就被消耗了这么多张,tmp就要减去差值,如果a[i]配合万能牌也不够t,那就实现不了。
代码实现
package com.zxy.exam;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;public class _卡牌 {static BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));static PrintWriter pw = new PrintWriter(System.out);static int N = 100010;static int[] a = new int[N];static int[] b = new int[N];static int n ;static long m;public static void main(String[] args) throws IOException {String[] s = bf.readLine().split(" ");n = Integer.parseInt(s[0]);m = Integer.parseInt(s[1]);s = bf.readLine().split(" ");for (int i = 0; i < s.length; i++) {a[i]=Integer.parseInt(s[i]);}s = bf.readLine().split(" ");for (int i = 0; i < s.length; i++) {b[i]=Integer.parseInt(s[i]);}int l = 0;int r = n*2;while (l < r){int mid = l + r + 1 >> 1;if (check(mid)){l = mid;}else r = mid - 1;}pw.println(l);pw.flush();}private static boolean check(int t) {long tmp = m;for (int i = 0; i < n; i++) {if (a[i]>=t) continue;if (b[i]+a[i]<t) return false;if (tmp + a[i] < t) return false;if (t - a[i] <= tmp){tmp -= (t-a[i]);}else {return false;}}return true;}
}
染色时间
问题描述
小蓝有一个 n 行 m* 列的白色棋盘, 棋盘的每一个方格都可以被染成彩色。
每个方格有一个染色时间 tij*, 不同方格的染色时间可能不同。如果一个方 格被触发了染色, 这个方格就会在 tij 秒之后变成彩色, 然后将自己上下左右四 个方向相邻的方格触发染色。每个方格只能被触发染色一次, 第一次触发之后 的触发为无效触发。
给定每个方格的染色时间, 在时刻 0 触发第一行第一列的方格染色, 请问 多长时间后整个棋盘完成染色。
输入格式
输入的第一行包含两个整数 n,m, 分别表示棋盘的行数和列数。
接下来 n* 行, 每行 m 个正整数, 相邻的整数之间用一个空格分隔, 表示每 个方格的染色时间。该部分的第 i* 行第 j* 个整数表示 tij, 即第 i* 行第 j* 列的方 格的染色时间。
输出格式
输出一行包含一个整数, 表示整个棋盘完成染色的时间。
样例输入
2 31 2 34 5 6
样例输出
12
运行限制
- 最大运行时间:1s
- 最大运行内存: 256M
分析
这道题目很明显的dfs模板题,需要注意的是这个染色时间,他是四个方向同时进行的,因此我们要找的是最大的时间,所以count要不断进行比较,从而找到消耗时间最多的那个格子。
需要注意的是,自己手写的这个储存坐标的类,一定要重写Comparable方法,否则无法顺利存如队列中!
代码实现
package com.zxy.exam;import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;public class _染色时间 {static int N = 510;static int[][] a = new int[N][N];static int[] dx = {-1,0,1,0};static int[] dy = {0,1,0,-1};static int count = 0;static int n,m;public static void main(String[] args) {Scanner scan = new Scanner(System.in);n = scan.nextInt();m = scan.nextInt();for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {a[i][j]=scan.nextInt();}}dfs();}private static void dfs() {Queue<Color> q = new LinkedList<>();q.add(new Color(0,0,a[0][0]));a[0][0]=0;while (!q.isEmpty()){Color tmp = q.poll();if (tmp.getTime() > count ){count = tmp.getTime();}for (int i = 0; i < 4; i++) {int x = dx[i]+tmp.x;int y = dy[i] + tmp.y;if (x >= 0 && x < m && y >= 0 && y < m && a[x][y]>0){q.add(new Color(x,y,tmp.time+a[x][y]));a[x][y]=0;}}}System.out.println(count);}}
class Color implements Comparable<Color>{int x;int y;int time;@Overridepublic int compareTo(Color o) {return this.time - o.time;}public Color(int x, int y, int time) {this.x = x;this.y = y;this.time = time;}public int getX() {return x;}public void setX(int x) {this.x = x;}public int getY() {return y;}public void setY(int y) {this.y = y;}public int getTime() {return time;}public void setTime(int time) {this.time = time;}
}相关文章:
蓝桥杯真题05
重新排序 问题描述 给定一个数组 A 和一些查询 Li,Ri 求数组中第 Li 至第 Ri个元素之和。 小蓝觉得这个问题很无聊, 于是他想重新排列一下数组, 使得最终每个查询结果的和尽可能地大。小蓝想知道相比原数组, 所有查询结果的总和最多可以增加多少? 输入格式 输入第一行包含…...
PMP那些事儿,备考小白看过来
一、PMP是什么? PMP指的是项目管理专业人士资格认证。它是由美国项目管理协会(Project Management Institute(PMI)发起的,严格评估项目管理人员知识技能是否具有高品质的资格认证考试。 其目的是为了给项目管理人员提供统一的行业标准。目前࿰…...
【数据分析实战】基于python对酒店预订需求进行分析
文章目录📚引言📖数据加载以及基本观察📑缺失值观察及处理🔖缺失值观察以及可视化🔖缺失值处理📖用户数据探索📑什么时间预定酒店将会更经济实惠?📑哪个月份的酒店预订是…...
【新2023Q2模拟题JAVA】华为OD机试 - 数组的中心位置
最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为od机试,独家整理 已参加机试人员的实战技巧本篇题解:数组的中心位置 题目 给你一…...
Vue的props组件详解
const props defineProps({name: String, }); String 是在 defineProps() 函数中用来声明 name prop 的类型,表示 name 必须是字符串类型。如果父组件没有传入 name 或传入的 name 不是字符串类型,那么就会产生类型验证错误。 defineProps() 函数支持…...
抽烟行为识别预警系统 yolov5
抽烟行为识别预警系统基于yolov5网络模型智能分析技术,抽烟行为识别预警算法通过监测现场人员抽烟行为自动存档进行报警提示。我们选择当下YOLO卷积神经网络YOLOv5来进行抽烟识别检测。6月9日,Ultralytics公司开源了YOLOv5,离上一次YOLOv4发布…...
【0基础学爬虫】爬虫基础之文件存储
大数据时代,各行各业对数据采集的需求日益增多,网络爬虫的运用也更为广泛,越来越多的人开始学习网络爬虫这项技术,K哥爬虫此前已经推出不少爬虫进阶、逆向相关文章,为实现从易到难全方位覆盖,特设【0基础学…...
airflow源码分析-任务调度器实现分析
Airflow源码分析-任务调度器实现分析 概述 本文介绍Airflow执行器的总体实现流程。通过函数调用的方式说明了Airflow scheduler的实现原理,对整个调度过程的源码进行了分析。 通过本文,可以基本把握住Airflow的调度器的运行原理主线。 启动调度器 可…...
一文学会数组的reduce()和reduceRight()
reduce()方法和reduceRight()方法依次处理数组的每个成员,最终累计为一个值。 它们的差别是,reduce()是从左到右处理,reduceRight()则是从右到左,其他完全一样。 [1, 2, 3, 4, 5].reduce(function (a, b) {console.log(a, b);ret…...
登录校验-Filter
上一篇介绍完了基础应用和细节,现在来完成登录校验功能基本流程: 要进入后台管理系统,必须完成登录操作,此时就需要访问登录接口Login。登录成功服务端会生成一个JWT令牌,并且返回给前端,前端会将JWT令牌存…...
C C++ Java python 分别写出不同表白girlfriend的爱心动态代码实现
C `` #include <stdio.h> #include <stdlib.h> #include <windows.h> void heart_animation() {int i, j, k; for (i = 1; i <= 6; i++) {for (j = -3; j <= 3; j++) {for (k = -4; k <= 4; k++) {if (abs(j) + abs(k) < i * 2) {printf(“I”)…...
ThreeJS-投影、投影模糊(十七)
无投影: 完整的代码: <template> <div id"three_div"></div> </template> <script> import * as THREE from "three"; import { OrbitControls } from "three/examples/jsm/controls/Or…...
蓝桥杯赛前冲刺-枚举暴力和排序专题1(包含历年蓝桥杯真题和AC代码)
目录 连号区间数(第四届蓝桥杯省赛CB组,第四届蓝桥杯省赛JAVAB组) 递增三元组(第九届蓝桥杯省赛CB组,第九届蓝桥杯省赛JAVAB组) 特别数的和(第十届蓝桥杯省赛CB组,第十届蓝桥杯省赛JAVAB组) 错误票据&a…...
Github库中的Languages显示与修改
目录 前言 【.gitattributes】文件 修改GitHub语言 前言 上传一个项目到GitHub时,发现显示的语言并非是自己项目所示的语言,这样的情况是经常发生的,为了能到达自己所需快速检索,或者是外部访问者能很好的搜索我们的项目&#…...
RocketMQ消息高可靠详解
文章目录 消息同步策略殊途同归同步基于offset而不是消息本身刷盘策略RocketMQ broker服务端以组为单位提供服务的,拥有着一样的brokerName则认为是一个组。其中brokerId=0的就是master,大于0的则为slave。 消息同步策略 master和slave都可以提供读服务,但是只有master允许…...
【python设计模式】4、建造者模式
哲学思想: 建造者模式的哲学思想是将复杂对象的创建过程分解成多个简单的步骤,并将这些步骤分别封装在一个独立的建造者类中。然后,我们可以使用一个指挥者类来控制建造者的调用顺序,以便在每个步骤完成后正确地构建复杂对象。 …...
【全网独家】华为OD机试Golang解题 - 机智的外卖员
华为Od必看系列 华为OD机试 全流程解析+经验分享,题型分享,防作弊指南华为od机试,独家整理 已参加机试人员的实战技巧华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典使用说明 如果想要在华为od机试中获取高分…...
Sentinel滑动时间窗限流算法原理及源码解析(中)
文章目录 MetricBucketMetricEvent数据统计的维度WindowWrap样本窗口实例 范型T为MetricBucket windowLengthInMs 样本窗口长度 windowStart 样本窗口的起始时间戳 value 当前样本窗口的统计数据 其类型为MetricBucket MetricBucket MetricEvent数据统计的维度 1、首先计算27t位…...
【OpenLayers】VUE+OpenLayers+ElementUI加载WMS地图服务
【OpenLayers】VUEOpenLayersElementUI加载WMS地图服务准备工作安装vue创建vue项目安装OpenLayers安装ElementUI加载wms地图服务准备工作 需要安装好nodejs,nodejs下载地址,下载对应的版本向导式安装即可。 安装完成后,控制台输入node -v&a…...
linux 命名管道 mkfifo
专栏内容:linux下并发编程个人主页:我的主页座右铭:天行健,君子以自强不息;地势坤,君子以厚德载物.目录 前言 概述 原理介绍 接口说明 代码演示 结尾 前言 本专栏主要分享linux下并发编程…...
Linux应用开发之网络套接字编程(实例篇)
服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...
【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密
在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...
七、数据库的完整性
七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...
vulnyx Blogger writeup
信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面,gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress,说明目标所使用的cms是wordpress,访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...
push [特殊字符] present
push 🆚 present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中,push 和 present 是两种不同的视图控制器切换方式,它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...
C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...
适应性Java用于现代 API:REST、GraphQL 和事件驱动
在快速发展的软件开发领域,REST、GraphQL 和事件驱动架构等新的 API 标准对于构建可扩展、高效的系统至关重要。Java 在现代 API 方面以其在企业应用中的稳定性而闻名,不断适应这些现代范式的需求。随着不断发展的生态系统,Java 在现代 API 方…...
Python实现简单音频数据压缩与解压算法
Python实现简单音频数据压缩与解压算法 引言 在音频数据处理中,压缩算法是降低存储成本和传输效率的关键技术。Python作为一门灵活且功能强大的编程语言,提供了丰富的库和工具来实现音频数据的压缩与解压。本文将通过一个简单的音频数据压缩与解压算法…...
Kubernetes 节点自动伸缩(Cluster Autoscaler)原理与实践
在 Kubernetes 集群中,如何在保障应用高可用的同时有效地管理资源,一直是运维人员和开发者关注的重点。随着微服务架构的普及,集群内各个服务的负载波动日趋明显,传统的手动扩缩容方式已无法满足实时性和弹性需求。 Cluster Auto…...
