蓝桥杯练习题——多路并归

news/2024/7/27 7:50:59/文章来源:https://blog.csdn.net/qq_62734493/article/details/136664713

1.鱼塘钓鱼

在这里插入图片描述
在这里插入图片描述

思路

不会反复横跳,按顺序合并,每次取出最大值
只需要考虑合并几个鱼塘,合并后剩余时间是多少,然后在这个超级鱼塘每次取最大值

#include<iostream>
#include<queue>
using namespace std;
const int N = 110;
int a[N], b[N], c[N];
int n, t;// 当前最后走到的鱼塘,还剩的时间和
int ff(int u, int sum){// 大根堆,堆顶存储最大值priority_queue<pair<int, int>> q;// 把已经经过的鱼塘入队for(int i = 1; i <= u; i++){q.push({a[i], b[i]});}int res = 0;// 当时间还没过完while(sum--){auto it = q.top();res += it.first;q.push({max(it.first - it.second, 0), it.second});q.pop();}return res;
}int main(){scanf("%d", &n);for(int i = 1; i <= n; i++) scanf("%d", &a[i]);for(int i = 1; i <= n; i++) scanf("%d", &b[i]);for(int i = 1; i < n; i++) scanf("%d", &c[i]); scanf("%d", &t);int ans = 0;for(int i = 1; i <= n && t > 0; i++){// 求最大值ans = max(ans, ff(i, t));// 每次向后再取一个鱼塘t -= c[i];}printf("%d", ans);return 0;
}

2.技能升级

在这里插入图片描述
在这里插入图片描述

思路

二分第 m 次升级的技能攻击力,然后大于这个攻击力的就累加求和,去除多余的数

#include<iostream>
using namespace std;
const int N = 1e5 + 10;
int a[N], b[N];
int n, m;int check(int x){long long cnt = 0;for(int i = 0; i < n; i++){if(a[i] >= x) cnt += (a[i] - x) / b[i] + 1;}return cnt >= m;
}int main(){scanf("%d%d", &n, &m);for(int i = 0; i < n; i++) scanf("%d%d", &a[i], &b[i]);// 二分第 m 次升级的技能增加的攻击力int l = 0, r = 1e6 + 1;while(l + 1 < r){int mid = (l + r) / 2;if(check(mid)) l = mid;else r = mid;}long long sum = 0, res = 0;for(int i = 0; i < n; i++){if(a[i] > l){// 计算项数int cnt = (a[i] - l) / b[i] + 1;// 计算最后一个数int ed = a[i] - b[i] * (cnt - 1);// 累加技能升级的总和sum += 1ll * (a[i] + ed) * cnt / 2;// 累加升级的个数,可能会有多余res += cnt;}}// 总的和减去多余的升级和printf("%lld", sum - (res - m) * l);return 0;
}

3.丑数

在这里插入图片描述

思路

在这里插入图片描述

class Solution {
public:int getUglyNumber(int n) {// 容器大小为 1,填充的值为 1vector<int> q(1, 1);// 枚举 2 3 5 的倍数int i = 0, j = 0, k = 0;// 只需要循环 n - 1 次while(--n){int t = min(q[i] * 2, min(q[j] * 3, q[k] * 5));q.push_back(t);if(t == q[i] * 2) i++;if(t == q[j] * 3) j++;if(t == q[k] * 5) k++;}return q.back();}
};

4.谦虚数字

在这里插入图片描述
在这里插入图片描述

思路

比如,集合是【2,3,5】,最开始会有3个空的queue,然后把{2, 0},{3, 1},{5, 2} 放入priority queue中({2, 0},表示第0个质数的queue的front是2),我们pop这个{2, 0},然后把2 × 2, 2 × 3, 2 × 5分别加入三个质数对应的queue中,因为这次我们取走的是来自质数2的queue里的数,所以我们要把这个queue的front加入priority queue中。
那么,现在的状态是priority queue中是{3, 1},{4, 0},{5, 2}。
三个queue中是[],[6],[10]

#include<iostream>
#include<vector>
#include<queue>
using namespace std;
const int N = 110;
// 小根堆存储当前最小的谦虚数字
priority_queue<pair<long long, long long>, vector<pair<long long, long long>>, greater<pair<long long, long long>>> q; 
// 存储所有的谦虚数字
queue<long long> v[N];
int p[N];
int k, n;signed main(){scanf("%d%d", &k, &n);for(int i = 1; i <= k; i++){scanf("%d", &p[i]);// 把 {2, 1},{3, 2},{5, 3} 放入q.push({p[i], i});}int res = 0;for(int i = 1; i <= n; i++){// 取出当前最小的谦虚数字, {2, 1}auto it = q.top();q.pop();long long a = it.first, b = it.second;res = a;for(int j = b; j <= k; j++){// 加入 2 × 2, 2 × 3, 2 × 5v[j].push(p[j] * a);if(b == j){// {3, 2},{4, 1},{5, 3}q.push({v[j].front(), j});// [], [6], [10]v[j].pop();}}}printf("%d", res);return 0;
}

5.序列

在这里插入图片描述
在这里插入图片描述

思路

排序 a 数组,分成 n 个组,每次取最小值
在这里插入图片描述

#include<iostream>
#include<algorithm>
#include<vector>
#include<queue>
using namespace std;
const int N = 2e3 + 10;
int a[N], b[N], c[N];
int m, n;// 每次合并 a b 数组
void merge(){// 小根堆,存储 a 和 b 的和,下标priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> q; // 先存储每组第一个数for(int i = 1; i <= n; i++){q.push({a[1] + b[i], 1});}for(int i = 1; i <= n; i++){auto it = q.top();q.pop();int x = it.first, y = it.second;c[i] = x;// a[1] + b[1] -> a[2] + b[1]q.push({x - a[y] + a[y + 1], y + 1});}for(int i = 1; i <= n; i++) a[i] = c[i];
}int main(){int t;scanf("%d", &t);while(t--){scanf("%d%d", &m, &n);for(int i = 1; i <= n; i++) scanf("%d", &a[i]);sort(a + 1, a + n + 1);for(int i = 1; i <= m - 1; i++){for(int i = 1; i <= n; i++) scanf("%d", &b[i]);merge();}for(int i = 1; i <= n; i++) printf("%d ", a[i]);printf("\n");}return 0;
}

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

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

相关文章

数大数据时代的关键:融合数据治理与AI为企业增值_光点科技

在数据驱动的今天&#xff0c;企业不能再将数据治理和人工智能&#xff08;AI&#xff09;视作孤立的实体。它们之间的协同作用已经成为推动企业增长的强大引擎。本文将探索数据治理与AI如何相互作用&#xff0c;形成闭环&#xff0c;以及企业如何利用这一关系来提升数据价值&a…

Android studio 性能调试

一、概述 Android studio 的Profiler可用来分析cpu和memory问题&#xff0c;下来进行说明介绍。 二、Android studio CPU调试 从开发模拟器或设备中启动应用程序&#xff1b; 在 Android Studio 中&#xff0c;通过选择View > Tool Windows > Profiler启动分析器。 应…

基于MATLAB的直流无刷电机速度控制

作品简介 基于MATLAB的直流无刷电机速度控制 仿真平台&#xff1a;Matlab 仿真结果为&#xff1a;

Python数据分析实验一:Python数据采集与存储

目录 一、实验目的与要求二、实验过程三、主要程序清单和运行结果1、爬取 “中国南海网” 站点上的相关信息2、爬取天气网站上的北京的历史天气信息 四、程序运行结果五、实验体会 一、实验目的与要求 1、目的&#xff1a; 理解抓取网页数据的一般处理过程&#xff1b;熟悉应用…

Windows环境部署Hadoop-3.3.2和Spark3.3.2

目录 一、Windows环境部署Hadoop-3.3.2 1.CMD管理员解压Hadoop压缩包 2.配置系统环境变量 3.下载hadoop winutils文件 4.修改D:\server\hadoop-3.3.2\etc\hadoop目录下的配置文件 (1)core-site.xml (2)hdfs-site.xml (3)mapred-site.xml (4)yarn-site.xml (5)workers…

“antd“: Unknown word.cSpell

你遇到的问题是 VS Code 的 Code Spell Checker 插件在检查拼写时&#xff0c;将 "antd" 标记为未知单词。"antd" 是 Ant Design 的缩写&#xff0c;是一个流行的 React UI 库&#xff0c;不是一个英语单词&#xff0c;所以 Spell Checker 会将其标记为错误…

Sui技术帮助Studio Mirai成功实现创意愿景

Brian和Ben Li兄弟对艺术充满热情&#xff0c;通过共同创立的研发工作室Studio Mirai&#xff0c;他们正在探索Web3技术与创意产业的交集。 Studio Mirai的第一个头像类项目&#xff08;profile picture&#xff0c;PFP&#xff09;Tamashi存在于Nozomi World中&#xff0c;这…

C++的语法

可能需要用到存储各种数据类型&#xff08;比如字符型、宽字符型、整型、浮点型、双浮点型、布尔型等&#xff09; 下表显示了各种变量类型在内存中存储值时需要占用的内存&#xff0c;以及该类型的变量所能存储的最大值和最小值。 注意&#xff1a;不同系统会有所差异 #inc…

【阅读论文】智能数据可视分析技术综述

智能数据可视分析技术综述 文章结构 中文引用格式: 骆昱宇, 秦雪迪, 谢宇鹏, 李国良. 智能数据可视分析技术综述. 软件学报, 2024, 35(1): 356–404. http://www.jos.org.cn/1000-9825/6911.htm

智能物流新纪元:分布式I/O模块重塑仓储自动化

随着工业4.0概念的深入人心&#xff0c;物流行业正在经历前所未有的变革。在这个过程中&#xff0c;物流企业必须积极走向工业自动化、智能化&#xff0c;进而提高物流效率&#xff0c;降低物流成本&#xff0c;以便更好地满足客户和市场的需求。智能物流、仓库自动化已然是趋势…

C++ 改造红黑树,封装map和set

C 改造红黑树,封装map和set 一.前言:已经实现好了的红黑树二.简化STL库里面对于map和set的封装1.STL库中红黑树的简化代码2.STL库中set的简化代码3.STL库中map的简化代码4.封装map和set的第一步5.红黑树第一个模板参数的价值6.红黑树节点的定义 三.仿函数1.解除仿函数的误解2.仿…

devops-git【部署及配置】

1、安装Git Linux做为服务器端系统&#xff0c;Windows作为客户端系统&#xff0c;分别安装Git&#xff1a; 【服务器端】 输入git --version 若出现 -bash:git:command not found则需要安装git&#xff1b;服务器端&#xff1a;输入yum -y install git安装完后&#xff0c;…

【Datawhale组队学习:Sora原理与技术实战】训练一个 sora 模型的准备工作,video caption 和算力评估

训练 Sora 模型 在 Sora 的技术报告中&#xff0c;Sora 使用视频压缩网络将各种大小的视频压缩为潜在空间中的时空 patches sequence&#xff0c;然后使用 Diffusion Transformer 进行去噪&#xff0c;最后解码生成视频。 Open-Sora 在下图中总结了 Sora 可能使用的训练流程。…

mac删除带锁标识的app

一 、我们这里要删除FortiClient.app 带锁 常规方式删除不掉带锁的 app【如下图】 二、删除命令&#xff0c;依次执行即可。 /bin/ls -dleO /Applications/FortiClient.app sudo /usr/bin/chflags -R noschg /Applications/FortiClient.app /bin/ls -dleO /Applications/Forti…

【idea】正则表达式去除项目中的各种注释

【ctrlshiftr】 整个项目全局选择正则表达式Regex 【ctrlr】当前页面 分别输入以下命令 ^\s*\n #去除空行 ^\s*\n# 去除 <!--xxx--> 注释 <!--.*?--># 删除 java 注释 // xxx //[\s\S]*?\n# 删除 java 注释 /* */ /\*{1,2}[\s\S]*?\*/替换全部 Replace all 为…

Arcgis新建位置分配求解最佳商店位置

背景 借用Arcgis帮助文档中的说明:在本练习中,您将为连锁零售店选择可以获得最大业务量的商店位置。主要目标是要将商店定位在人口集中地区附近,因为这种区域对商店的需求量较大。设立这一目标的前提是假设人们往往更多光顾附近的商店,而对于距离较远的商店则较少光顾。您…

网络编程:TCP和UDP

一、通信模式 1.1 套接字socket 1.网络通信通过套接字进行数据传输 2.socket是一个函数&#xff0c;为通信创建一个端点&#xff0c;并返回该端点的文件描述符 3.套接字本身是一个文件描述符&#xff0c;对应的是一个特殊的文件&#xff0c;该文件描述符维护了两个缓冲区&a…

让el-input与其他组件能够显示在同一行

让el-input与其他组件能够显示在同一行 说明&#xff1a;由于el-input标签使用会默认占满一行&#xff0c;所以在某些需要多个展示一行的时候不适用&#xff0c;因此需要能够跟其他组件显示在同一行。 效果&#xff1a; 1、el-input标签内使用css属性inline 111<el-inp…

智慧未来,构建智慧校园业务架构的探索与实践

随着科技的不断发展&#xff0c;智慧校园作为教育信息化的重要组成部分&#xff0c;正在逐步改变传统教育管理模式&#xff0c;为学校带来更高效、便捷的管理服务。本文将深入探讨智慧校园业务架构设计的理念、核心功能和应用场景&#xff0c;助力读者了解如何构建智慧校园&…

STM32利用标准库控制定时器3复用端口PB4输出PWM波形

这节也是接着上节来演示的&#xff0c;上节写的是TIM2的CH1输出PWM波形&#xff0c;这次来学习一下TIM3的端口复用方法来输出PWM&#xff0c;来看看端口引脚图&#xff1a;正常情况下TIM3的CH1通道的PWM输出引脚为PA6&#xff0c;现在我不想用这个端口输出了&#xff0c;我想换…