算法刷题整理合集(七)·【算法赛】

本篇博客旨在记录自已的算法刷题练习成长,里面注有详细的代码注释以及和个人的思路想法,希望可以给同道之人些许帮助。本人也是算法小白,水平有限,如果文章中有什么错误或遗漏之处,望各位可以在评论区指正出来,各位共勉💪。
文章目录
- 1、抓住拿国一
- 2、蓝桥字符
- 3、蓝桥大使
- 4、拳头对决
- 5、未来竞赛
- 6、备份比赛数据
1、抓住拿国一
蓝桥杯赛场上,选手小王脑洞大开,跑去问裁判:“裁判,蓝桥杯要是改成‘蓝桥抓猪大赛’,得抓多少头猪才能拿国一啊?”裁判愣了愣,但为了显摆幽默,淡定答道:“好说!想拿国一,从第一届开始,每届抓的猪数得是这一届的届数加上前面所有届数的总和。比如,第一届抓 1 头,第二届抓 1+2=3 头,第三届抓 1+2+3=6 头 … 今年是第十六届蓝桥杯,你自己算算吧!”
现在,请你帮小王算算,要拿国一,总共得抓多少头猪?
解题代码:
public class Main {public static void main(String[] args) {int sum = 0;for (int i = 1; i <= 16; i++) {sum += i;}System.out.println(sum);}
}
2、蓝桥字符
蓝桥杯官方近日收到了一份神秘的包裹,里面包含一个 U 盘和一张纸条,纸条上仅写有一个由小写字母组成的字符串 S。经过初步检查,U盘内存储的内容似乎与即将到来的蓝桥杯大赛有关,但 U 盘被加密,无法直接访问。根据情报提供方的提示,U盘的密码与字符串 S 中特定子序列的出现次数密切相关。
具体来说,密码等于字符串 S 中子序列 lan 的出现次数。这里的子序列是指从字符串 S 中按顺序选取字符(不一定连续)组成的新字符串。
为了帮助蓝桥杯官方顺利解开 U 盘的密码,你需要编写一个程序,计算字符串 S 中子序列 lan 的出现次数。
输入格式:
输入为一个由小写字母组成的字符串 S,长度不超过 105。
输出格式:
输出一个整数,表示字符串 S 中子序列 lan 的出现次数。
解题代码:
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);String s = sc.nextLine();sc.close();long countL = 0;long countLA = 0;long countLAN = 0;for (char c : s.toCharArray()){if (c == 'l'){countL++;} else if (c == 'a'){countLA += countL;} else if (c == 'n') {countLAN += countLA;}}System.out.println(countLAN);}
}
3、蓝桥大使
小蓝和小桥是某学校的蓝桥大使,他们的主要任务是作为宣传人员在校内宣传蓝桥杯比赛。蓝桥杯是一项全国性的编程竞赛,吸引了众多学生参与。为了扩大比赛的影响力,学校决定在每个班级进行宣传,而小蓝和小桥则负责这项工作。
学校共有 n 个班级,每个班级都需要进行宣传。小蓝和小桥可以选择去不同的班级宣传,但为了公平起见,他们决定尽量平均分配任务。具体来说:
- 小蓝将去 (n/2)个班级宣传。
- 小桥将去剩下的 n−(n/2)个班级宣传。
对于第 i 个班级:
- 如果小蓝去宣传,他将获得 Ai 元的酬劳。
- 如果小桥去宣传,她将获得 Bi 元的酬劳。
小蓝和小桥希望最大化他们总共获得的酬劳,请你帮他们计算总酬劳最大值是多少?
输入格式:
第一行包含一个整数 n(1≤n≤105),表示班级的数量。
接下来 n 行,每行包含两个整数 Ai,Bi(1≤Ai,Bi≤109),分别表示小蓝和小桥去第 i 个班级宣传时获得的酬劳。
输出格式:
输出一个整数表示答案。
解题代码:
import java.util.*;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();int[] a = new int[n];int[] b = new int[n];int[] c = new int[n];for (int i = 0; i < n; i++) {a[i] = sc.nextInt();b[i] = sc.nextInt();c[i] = b[i] - a[i];}sc.close();// 小桥去班宣传的酬劳减去小蓝的,并进行排序Arrays.sort(c);long sum = 0;// 将大于的一半累加,剩下的小蓝去宣传for (int i = n-1; i >= n/2 ; i--) {sum += c[i];}for (int i = 0; i < n; i++) {sum += a[i];}System.out.println(sum);}
}
4、拳头对决
蓝桥训练营的日子总是紧张而充实。某天清晨,队员们在连续的高强度训练后,个个眉头紧锁,烦躁在空气中弥漫,甚至有人开始攥紧拳头,想要找个出口释放压力。蓝教练和红教练察觉到这股暗流,交换了一个眼神,灵光一闪:何不来一场“拳头对决赛”?既能让大家舒展筋骨,又能在笑声中拉近彼此的距离。
拳头的大小,成了这场友谊赛的焦点——谁的拳头大,谁就更有气势!两位教练各挑了 N 名队员,蓝队的第 i 个队员的拳头大小为 Ai,红队的第 i 个队员的拳头大小为 Bi。
比赛的流程是这样的:红教练会按照顺序依次派出他的队员(先派第一位,然后第二位,以此类推)。每当红教练派出一名队员展示拳头后,蓝教练需要从他尚未上场的队员中选择一位应战。裁判会将蓝教练派出的队员的拳头大小与红教练所有已上场队员的拳头大小逐一比较。每当蓝队员的拳头大小大于红队某位已上场队员的拳头,蓝教练便能赢得一次胜利(注意,这不是一对一的较量,而是以一敌多的挑战)。
这场比赛不为胜负,只为放松与切磋,可蓝教练心里却藏着小算盘:既要让队员们开心,也想借机秀一把带队本事,在蓝桥杯的训练营里留下点名声。现在,请你助蓝教练一臂之力,算出在最优策略下,他最多能拿下多少次胜利?
输入格式:
第一行包含一个整数 N(1≤N≤105),表示队员数量。
第二行包含 N 个整数 A1,A2,…,AN(1≤Ai≤109),分别是蓝教练队员的拳头大小。
第三行包含 N 个整数 B1,B2,…,BN(1≤Bi≤109),分别是红教练队员的拳头大小。
输出格式:
输出一个整数,表示蓝教练在最多能赢下的胜利次数。
解题代码:
import java.util.Arrays;
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int N = (int)1e5+10;int n = sc.nextInt();int[] a = new int[N];int[] b = new int[N];for (int i = 1; i <= n; i++) {a[i] = sc.nextInt();}for (int i = 1; i <= n; i++) {b[i] = sc.nextInt();}sc.close();// 对数组a从索引1到n的部分进行排序Arrays.sort(a,1,n+1);long ret = 0;// 遍历数组for (int i = 1; i <= n; i++) {// 初始化左右指针和答案int l = i,r = n, ans = n+1;// 使用二分查找找到第一个大于b[i]的元素位置while(l <= r) {// 计算中间位置,相当于(l+r)/2int mid = l+r >> 1;if (a[mid] > b[i]){// 如果中间元素大于b[i],更新答案为中间位置ans = mid;// 将右指针移到中间位置左边,继续查找是否有更小满足条件的r = mid - 1;}else {// 如果中间元素不大于b[i],将左指针移到中间位置右边l = mid+1;}}// 累加满足元素之和ret += n-ans+1;}System.out.println(ret);}
}
5、未来竞赛
时间飞逝,转眼间来到了5025年,蓝桥杯大赛已经成为全球瞩目的盛事,吸引了来自世界各地的顶尖选手。每个国家和地区都派出了自己的精英队伍,准备在这场科技盛宴中大显身手。
本次大赛共有 N 位参赛者,第 i 位参赛者的编号位 i,来自编号为 Ai 的国家。比赛机房的电脑从左到右依次编号为 1 到 N,每位参赛者将在与自己编号相同的电脑上进行比赛。为了确保比赛的公平性,蓝桥杯官方决定对部分参赛者的电脑进行抽样监控。然而,监控方式必须满足以下条件:
- 监控的电脑数量不能为零。
- 同一个国家或地区的参赛者最多只能有两台电脑被监控,不能过多集中监控某个国家的选手。
- 如果同一个国家或地区的两台电脑被监控,它们之间的距离不能超过 D。这里的距离定义为两台电脑编号之差的绝对值。
由于可能的监控方式实在太多,官方一时难以计算,于是他们向你求助,希望你能帮忙计算出所有合法的监控方式数量。
由于结果可能非常庞大,请将答案对 109+7 取模后输出。
解题代码:
import java.util.*;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int MOD = 1000000007;int N = sc.nextInt(); // 表示参赛者数量int D = sc.nextInt(); // 表示选取的距离要求int[] arr = new int[N];// 参赛者编号for (int i = 0; i < N; i++) {arr[i] = sc.nextInt();}HashMap<Integer, List<Integer>> map = new HashMap<>();for (int i = 0; i < N; i++) {int country = arr[i];int computer = i+1;map.computeIfAbsent(country, k -> new ArrayList<>()).add(computer);}long total = 1;for (List<Integer> list : map.values()) {Collections.sort(list);int C = list.size();long ways = 1; // 选0的方式数目ways += C; // 选1的方式数目long pairs = 0;int right = 0;for (int i = 0; i < list.size(); i++) {while (right < list.size() && list.get(right) - list.get(i) <= D) {right++;}pairs += (right - i - 1);}ways += pairs;total = (total * ways) % MOD;}total = (total - 1 + MOD) % MOD; // 防止负数System.out.println(total);}
}
6、备份比赛数据
蓝桥杯大赛的组委会最近遇到了一个棘手的问题。他们有 N 台电脑需要备份比赛数据,每台电脑所需的备份时间分别为 A1,A2,…,AN 分钟。
备份必须按编号顺序依次进行,即先第 1 台,再第 2 台,依此类推。每台电脑的备份需要工作人员持续操作,且必须安排在同一天内完成。例如,如果某台电脑的备份需要 5 分钟,那这 5 分钟必须安排在同一天,不能拆分到两天。如果当天剩余时间不足以完成某台电脑的备份,那就只能推迟到第二天进行。
每台电脑备份完成后,系统需要等待 Bi 分钟才能开始下一台的备份。这段等待时间不需要工作人员操作,且可以跨天进行。例如,如果第 1 台电脑的备份在第 1 天结束时完成,且 B1=10 分钟,那么第 2 台电脑的备份只需在第 2 天开始后等待 10 分钟就能进行。
现在,组委会希望尽量缩短每天的工作时间,以便工作人员能尽早下班休息。但上级有要求,所有电脑的备份必须在最多 T 天内完成。对此,请你帮助蓝桥杯组委会计算出每天最少需要安排的工作时间 M(M 最大不可超过 3600),以便所有电脑的备份能在 T 天内顺利完成。如果无论如何都无法满足条件,请直接输出 −1。
解题代码:
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int N = sc.nextInt(); // 电脑数量int T = sc.nextInt(); // 最多允许的天数int[] A = new int[N]; // 每台电脑的备份时间int[] B = new int[N]; // 每台电脑备份后等待时间// 最大的单个备份时间int maxA = 0;for (int i = 0; i < N; i++) {A[i] = sc.nextInt();if (A[i] > maxA) {maxA = A[i];}}for (int i = 0; i < N; i++) {B[i] = sc.nextInt();}sc.close();// 每天工作时间 M 的下界为 maxA(至少能完成最耗时备份),上界为3600int left = maxA, right = 3600, ans = -1;while (left <= right) {int mid = (left + right) / 2;if (canFinish(mid, N, T, A, B)) {ans = mid;right = mid - 1;} else {left = mid + 1;}}System.out.println(ans);}// 模拟:以每天工作时间 M 是否能在 T 天内完成所有备份任务static boolean canFinish(int M, int N, int T, int[] A, int[] B) {int days = 1;int currentTime = 0; // 当前天已占用的时间// 安排第一台电脑的备份currentTime = A[0];// 对后续每台电脑依次安排for (int i = 1; i < N; i++) {// 先安排等待时间(等待时间可以跨天)int waiting = B[i - 1];while (waiting > 0) {int remaining = M - currentTime;if (remaining >= waiting) {currentTime += waiting;waiting = 0;} else {waiting -= remaining;days++;currentTime = 0;if (days > T) return false;}}// 再安排备份 A[i](必须在一天内连续完成)if (currentTime + A[i] <= M) {currentTime += A[i];} else {days++;currentTime = A[i];if (days > T) return false;}}return days <= T;}
}
有帮助的话,希望可以点赞❤️+收藏⭐,谢谢各位大佬~~✨️✨️✨️
相关文章:
算法刷题整理合集(七)·【算法赛】
本篇博客旨在记录自已的算法刷题练习成长,里面注有详细的代码注释以及和个人的思路想法,希望可以给同道之人些许帮助。本人也是算法小白,水平有限,如果文章中有什么错误或遗漏之处,望各位可以在评论区指正出来…...
Android Studio控制台中文乱码解决方案
前些天发现了一个蛮有意思的人工智能学习网站,8个字形容一下"通俗易懂,风趣幽默",感觉非常有意思,忍不住分享一下给大家。 👉点击跳转到教程 前言: 在项目调试过程中,用华为手机调试控制台没任何问题&#x…...
BUAA XCPC 2025 Spring Training 2
C \color{green}{\texttt{C}} C [Problem Discription] \color{blue}{\texttt{[Problem Discription]}} [Problem Discription] 给定一棵以 1 1 1 为根的树,记 a i a_{i} ai 表示节点 i i i 的权值, lca( i , j ) \text{lca(}i,j) lca(i,j) 表示节…...
Edge浏览器如何默认启动某个工作区 / 为工作区添加快捷方式
Edge浏览器的工作区确实非常好用,可以多端同步标签页。但是打开Edge时默认是没有在工作区的状态,这个状态下的标签页可能会丢失。所以我研究了一下,如何点击快捷方式时自动启动一个工作区,方法如下: 先找到WorkspaceCa…...
Cherry Studio搭建本地知识库,结合DeepSeek实现RAG
Cherry Studio搭建本地知识库,结合DeepSeek实现RAG CherryStudioCherryStudio 简介环境准备 模型配置本地知识创建1、新建知识库2、添加文件3、添加网址或者网站4、搜索知识库 结合DeepSeek实现RAG1、选择知识库2、进行提问 常见问题与解决方案 CherryStudio Cherr…...
【Android】VehiclePropertyAccess引起CarService崩溃
VehiclePropertyAccess引起CarService崩溃 VehiclePropertyAccess VehiclePropertyAccess属性,用于定义车辆属性的访问权限。权限包括 读:READ,只可以读取,不能写入。 VehiclePropertyAccess:READ写:WRITE…...
深度剖析:复制带随机指针的链表算法实现
在链表相关的算法中,复制一个带有随机指针的链表是一个经典且具有一定难度的问题。本文将深入分析一段用C语言实现的复制带随机指针链表的代码,通过模块化的方式详细解释每段代码的作用,帮助读者更好地理解这一复杂算法。 作者主页…...
Java 大视界 -- Java 大数据在智慧文旅旅游目的地营销与品牌传播中的应用(150)
💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…...
SQLMesh SCD-2 时间维度实战:餐饮菜单价格演化追踪
场景背景:动态菜单价格管理 考虑某连锁餐厅的菜单管理系统,需要记录食品价格的历史变更轨迹。业务需求包括: 记录每次价格调整的时间点支持历史价格查询(如"2020年1月2日汉堡多少钱")维护当前有效价格清单…...
uniapp自身bug | uniapp+vue3打包后 index.html无法直接运行
前提: 已经修改了基础路径 打开打包文件,双击运行index.html报错,无法访问页面 uniappvue2项目是可以正常运行的 vue3修改publicPath: ./后,也是可以正常访问打包文件中的index.html 点进控制台提供的链接:https:/…...
数据分析面试--京东
1.考察日期函数的应用 select Order_date, count(distinct user_id) as uv from (select user_id, Order_date, row_number() over(partition by user_id order by Order_date) as new_tagfrom ord where date_diff(current_date(), Order_date)<30 ) t where new_tag1 gro…...
Centos7搭建Zabbix4.x监控HCL模拟网络设备:zabbix-server搭建及监控基础04
兰生幽谷,不为莫服而不芳; 君子行义,不为莫知而止休。 4.OID查看工具Getif安装及使用 找度娘下载Getif,该软件比较老,可以用来查看OID编码,我的宿主机是Win11,无法安装。所以只有到虚拟机win12去安装&am…...
爬虫:scrapy面试题大全(60个scrapy经典面试题和详解)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 1. 什么是Scrapy?2. Scrapy 框架的组件及其作用?3. Scrapy的工作流程是什么?(运行机制)4. 如何创建一个Scrapy项目?5. 如何定义一个Spider?6. 如何在Scrapy中提取数据?7. Scrapy中的Item是什么?8. Scrapy中的P…...
Ubuntu Debian 系统下挂载 Samba 共享目录的完整指南
文章目录 Ubuntu & Debian 系统下挂载 Samba 共享目录的完整指南前提条件挂载 Samba 共享临时挂载避免明文密码永久挂载 常见选项卸载故障排查 Ubuntu & Debian 系统下挂载 Samba 共享目录的完整指南 想把NAS中的内容通过Samba挂载到 OrangePi 5B,但是 Ora…...
蓝桥杯2023年第十四届省赛真题-异或和之差
题目来自DOTCPP: 思路: 什么是异或和? ①题目要求我们选择两个不相交的子段,我们可以枚举一个分界线i,子段1在 i 的左边, 子段2在 i 的右边,分别找到子段1和子段2的最大值、最小值。 ②怎么确…...
考研课程安排(自用)
文章目录 408数据结构(王道)计算机组成原理(王道)操作系统(王道)计算机网络(湖科大版) 数学一高等数学(微积分)线性代数和概率论 408 数据结构(王…...
linux命令行工具进阶
文章目录 前言ssh免密登录,免密码登录,公私钥查看与修改IP地址临时修改永久修改 mount临时切换根文件系统永久切换根文件系统loop文件partedinitramfsuboot command line总结 前言 本文记录了一些不经常用到,但在某个时刻需要用到的一些指令…...
Linux系统管理实战:文件权限配置、用户组协作与日志处理全解析
1、创建/www目录,在/www目录下新建name和https目录,在name和https目录下分别创建一个index.html文件,name下面的index.html文件中包含当前主机的主机名,https目录下的index.html文件中包含当前主机的ip地址。 (1&…...
[自动化] 【八爪鱼】使用八爪鱼实现CSDN文章自动阅读脚本
在CSDN上,文章的阅读量往往是衡量内容影响力的一个重要指标。为了测试自动化手段能否提高阅读数,我尝试使用网页自动化工具来模拟人工阅读某个ID的文章。 1. 网页自动化的常见方案 谈到网页自动化,Selenium 是一个最常见的选择。它可以通过…...
Go语言分布式锁实战:dlock助力构建高并发稳定系统
在构建分布式系统时,一个常见且棘手的问题便是资源竞争和数据一致性问题。分布式锁作为一种常用的解决方案,在多个进程或节点之间协调访问共享资源时显得尤为重要。今天,我们将介绍一款分布式锁库——dlock,并通过详细的使用示例带…...
如何提高G口服务器的安全性?
G口服务器可以支持千兆网络传输速度,能够为企业提供更快的数据处理能力和传输能力,随着网络流量的不断增长以及复杂计算任务的普及,企业对于网络带宽的要求也在相应提高,而G口服务器则可以降低网络的延迟度,大幅度提高…...
为没有CMake配置的第三方库添加CMake配置
1 编写CMakeLists.txt cmake_minimum_required(VERSION 3.15) #如果你第三方库和自己的库没有xxxConfig.cmake #请修改项目名称和命名空间(一般不需要) project("pthreads" LANGUAGES C CXX) set(KC_NAMESPACE "") #set(K…...
Linux驱动编程 - seq_open、single_open使用方法
目录 前言: 一、seq_xxx 1、seq_xxx 函数介绍 1.1 seq_open 1.2 seq_read 1.3 seq_lseek 1.4 seq_release 1.5 格式化输出函数 2、seq_open 实例 二、single_xxx 函数 1、single_xxx 函数介绍 1.1 single_open 1.2 single_start 1.3 single_next 1.4 single_stop…...
N列股票收盘价为起点的马科维茨(Markowitz)均值—方差理论
1. 数据准备与收益率计算 输入数据: 假设你有一个矩阵,每一列代表一只股票的历史收盘价序列。每一行对应一个时间点的收盘价。 计算收益率: 马科维茨理论要求使用资产的收益率而非价格。常用的收益率计算方法有对数收益率或简单收益率。 2.…...
【嵌入式学习2】函数
目录 ## 函数 ## 函数分类 ## 函数定义 1、无参数无返回值 2、有参数无返回值 3、有参数有返回值 ## 函数声明 ## 局部变量和全局变量 ## 多文件编程 如何避免把同一个头文件 include 多次,或者头文件嵌套包含? 命令行编译文件 头文件包含的…...
模式搜索+扩散模型:FlowMo重构图像Token化的技术革命
图像Token化作为现代生成式AI系统的核心技术,长期面临对抗性训练不稳定、潜在空间冗余等挑战。斯坦福大学李飞飞与吴佳俊团队提出的FlowMo(Flow towards Modes)创新性地融合模式搜索与扩散模型,在多个关键维度突破传统方法局限&am…...
mac brew 安装的php@7.4 打开redis扩展
1. 找到php7.4的pecl目录 一般在这个位置 cd /usr/local/Cellar/php7.4/7.4.33_8/pecl/20190902 ls 一下 有个 redis.so 于是 直接去php.ini编辑了 php.ini的路径 vim /usr/local/etc/php/7.4/php.ini 把938行添加进去 然后重启一下 php7.4 brew services restart ph…...
OSPF多区域通信
作业要求: 1、多区域0SPF area 0、area10、are20 2、AR5、AR6作为stub区,使用环回接口与Pc1进行通信 第一步:为各端口配置IP地址 AR1: <Huawei>sys [Huawei]int g0/0/0 [Huawei-GigabitEthernet0/0/0]ip add 5.5.5.1 24 [Huawei-GigabitEther…...
C++模板编程与元编程面试题及参考答案(精选100道题)
目录 解释 C++ 模板的实例化过程,显式实例化与隐式实例化的区别 模板函数在不同翻译单元中的 ODR(单一定义规则)问题 模板参数推导失败的可能场景及解决方法 模板函数中 auto 返回类型的推导规则 如何限制模板函数仅接受特定类型的参数?(非 C++20 概念场景) 函数模板…...
括弧匹配检验(信息学奥赛一本通-1354)
【题目描述】 假设表达式中允许包含两种括号:圆括号和方括号,其嵌套的顺序随意,如([ ]())或[([ ][ ࿳…...
