AI刷题-蛋糕工厂产能规划、优质章节的连续选择
挑两个简单的写写
目录
一、蛋糕工厂产能规划
问题描述
输入格式
输出格式
解题思路:
问题理解
数据结构选择
算法步骤
关键点
最终代码:
运行结果:编辑
二、优质章节的连续选择
问题描述
输入格式
输出格式
解题思路:
问题理解
数据结构选择
算法步骤
最终代码:
运行结果:
一、蛋糕工厂产能规划
问题描述
小明开了一家蛋糕工厂,目前工厂里面有 m 台机器和 w 个工人,每天可以生产的蛋糕数量是 m * w。有一天他接到了一个订单,需要生产 n 个蛋糕,客户希望能够尽快的一次性交付,但是他算不清楚需要多少天才能生产完,请你帮帮小明。(提示:为了提升产能,每天可以用蛋糕购买额外的机器或者工人,每台机器或者每个工人,需要花费 p 个蛋糕。)
为了方便理解,我们举个例子:假如最开始小明的工厂只有 m = 1 台机器和 w = 2 个工人,每次扩大产能需要的花费是 p = 1,为了生产 n = 60 个蛋糕,可以这么操作:
-
第一天:m * w = 1 * 2 = 2 生产 2 个蛋糕,同时新增 2 台机器,此时 m = 3,剩余蛋糕 0
-
第二天:m * w = 3 * 2 = 6 生产 6 个蛋糕,同时新增 3 台机器,3 个工人,此时 m = 6, w = 5,剩余蛋糕 0
-
第三天:m * w = 6 * 5 = 30
-
第四天:m * w = 6 * 5 = 30 所以在第四天就完成了生产计划
输入格式
输入的数据只有一行,空格分割的四个整数,代表 m, w, p, n
数据约束
- 1 <= m, w, p, n <= 10^8
输出格式
输出一个整数用来表示需要几天才能完成生产计划
输入样例
3 1 2 12
输出样例
3
样例解释
-
第一天:生产的蛋糕数量 m * w = 3 * 1 = 3。此时花 2 个蛋糕,雇佣了另外一个工人,此时 w = 2,依然剩余 1 个蛋糕
-
第二天:生产的蛋糕数量 3 * 2 = 6。此时花 2 * p = 4 个蛋糕雇佣了另外一个工人,同时新增了另外一台机器,此时 m = 4, w = 3,而且剩余 3 个蛋糕(包括第一天剩余的那一个)
-
第三天:生产的蛋糕数量 4 * 3 = 12,已经符合预期的产量了,所以只需要三天就可以完成生产计划
解题思路:
问题理解
小明的蛋糕工厂每天可以生产 m * w 个蛋糕。为了尽快完成生产 n 个蛋糕的任务,他可以选择用蛋糕购买额外的机器或工人,每台机器或每个工人需要花费 p 个蛋糕。目标是计算出最少需要多少天才能完成生产计划。
数据结构选择
由于我们需要动态地调整机器和工人的数量,并且需要计算每天的生产量和剩余蛋糕数,因此我们可以使用一个循环来模拟每一天的生产过程。
算法步骤
-
初始化:
- 初始机器数量
m - 初始工人数量
w - 每天的生产成本
p - 目标生产量
n - 当前天数
days - 当前剩余蛋糕数
cakes
- 初始机器数量
-
循环模拟每一天:
- 计算当天的生产量
production = m * w - 更新剩余蛋糕数
cakes += production - 检查是否已经达到目标生产量
n,如果是,则返回当前天数days - 计算可以购买的机器和工人的最大数量
max_buy = cakes / p - 尝试用剩余的蛋糕购买机器和工人,使得
m * w最大化 - 更新机器和工人的数量
- 增加一天
days++
- 计算当天的生产量
-
返回结果:
- 当达到或超过目标生产量
n时,返回当前天数days
- 当达到或超过目标生产量
关键点
- 在每次购买机器和工人时,需要考虑如何分配购买的资源,使得
m * w最大化。 - 需要动态调整机器和工人的数量,以确保每天的生产量最大化。
最终代码:
#include <iostream>
#include <algorithm>
#include <limits>int solution(int m, int w, int p, int n) {int passes = 0;long long candy = 0; // 使用 long long 防止溢出long long run = std::numeric_limits<long long>::max();while (candy < n) {if (m > std::numeric_limits<long long>::max() / w) {break;} else {int step = (p - candy) / (m * w);if (step <= 0) {int mw = candy / p;if (m >= w + mw) {w += mw;} else if (w >= m + mw) {m += mw;} else {int total = m + w + mw;m = total / 2;w = total - m;}candy %= p;step = 1;}passes += step;if (step * m > std::numeric_limits<long long>::max() / w) {candy = std::numeric_limits<long long>::max();} else {candy += step * m * w;run = std::min(run, static_cast<long long>(passes) + ((n - candy + m * w - 1) / (m * w)));}}}return std::min(passes, static_cast<int>(run));
}int main() {std::cout << (solution(3, 1, 2, 12) == 3) << std::endl;std::cout << (solution(10, 5, 30, 500) == 8) << std::endl;std::cout << (solution(3, 5, 30, 320) == 14) << std::endl;return 0;
}
运行结果:
二、优质章节的连续选择
问题描述
番茄小说上有很多精彩的书籍,编辑想从其中一本书籍中挑选出若干精彩章节。这本书有 n 个章节,每个章节的文字数量分别为 a[i](1≤i≤n)。
出于阅读体验的考虑,编辑希望挑选出来的章节是在书中是连续的,并且总字数不超过 k。
编辑是特别的书虫,他认为在挑选出来的章节中,如果某个章节的文字数量比前后章节都多,则这个章节是优质章节。挑选出来章节中的第一章和最后一章不能作为优质章节。
编辑想知道,如何挑选才能产生尽可能多的优质章节,并且满足总字数不超过 k。
输入格式
第一行是整数 n 和 k;(3≤n≤10^5,0≤k≤10^9)
第二行是 n 个整数 a[i];(1≤a[i]≤10^7)
输出格式
输出整数 m、start、end,m 表示优质章节的数量,start 表示挑选出来的首个章节在书中的位置,end 是挑出来的末尾章节在书中的位置;
如果优质章节数量相同的选择有多个,则输出总字数最少的选择;如果仍有多个,则输出 start 最小的选择;
题目保证至少有一种选择。
输入样例 1
8 15000
1000 3000 2000 4000 3000 2000 4000 2000
输出样例 1
2 1 5
输入样例 2
8 15000
2000 5000 2000 1000 4000 2000 4000 3000
输出样例 2
2 4 8
样例解释
样例 1,选择第 1 章到第 5 章,一共有 2 个优质章节,分别是第 2 章和第 4 章;
样例 2,选择第 4 章到第 8 章,一共有 2 个优质章节,分别是第 5 章和第 7 章;
数据范围
(3≤n≤10^5,0≤k≤10^9)
(1≤a[i]≤10^7)
解题思路:
问题理解
- 目标:从一本书的连续章节中挑选出总字数不超过
k的章节,使得优质章节(比前后章节字数都多的章节)的数量最多。 - 约束:
- 章节必须是连续的。
- 总字数不超过
k。 - 优质章节不能是挑选出来的第一个或最后一个章节。
数据结构选择
- 数组:用于存储每个章节的字数。
- 滑动窗口:用于在数组中寻找满足条件的连续子数组。
算法步骤
-
初始化:
- 使用两个指针
start和end来表示当前窗口的开始和结束位置。 - 使用变量
current_sum来记录当前窗口的总字数。 - 使用变量
best_start和best_end来记录最优解的开始和结束位置。 - 使用变量
best_quality_count来记录最优解中的优质章节数量。
- 使用两个指针
-
滑动窗口:
- 从左到右遍历数组,逐步扩展
end指针,直到总字数超过k。 - 当总字数超过
k时,移动start指针,直到总字数再次小于等于k。 - 在每次移动
end指针时,检查当前窗口内的优质章节数量,并更新最优解。
- 从左到右遍历数组,逐步扩展
-
优质章节判断:
- 对于每个窗口,遍历其中的章节,判断是否为优质章节(比前后章节字数都多)。
- 注意:第一个和最后一个章节不能作为优质章节。
-
结果输出:
- 最终输出最优解的优质章节数量、开始位置和结束位置。
最终代码:
#include <bits/stdc++.h>std::string solution(int n, int k, std::vector<int> array_a) {assert(n == array_a.size());assert(3 <= n && n <= 1e5);assert(0 <= k && k <= 1e9);std::vector<long long> sum_array(n);sum_array[0] = array_a[0];for (int i = 1; i < n; ++i) {sum_array[i] = sum_array[i - 1] + array_a[i];assert(1 <= array_a[i] && array_a[i] <= 1e7);}auto get_sum_from_a_to_b = [&](int left, int right) -> long long {return sum_array[right] - (left > 0 ? sum_array[left - 1] : 0);};std::deque<int> q;int ans = 0;int start = -1, end = -1;long long total_size = -1;for (int i = 1; i < n - 1; ++i) {if (array_a[i] > array_a[i - 1] && array_a[i] > array_a[i + 1]) {q.push_back(i);while (!q.empty() && get_sum_from_a_to_b(q.front() - 1, q.back() + 1) > k) {q.pop_front();}if (!q.empty()) {long long current_size = get_sum_from_a_to_b(q.front() - 1, q.back() + 1);if (q.size() > ans || (q.size() == ans && total_size > current_size)) {ans = q.size();start = q.front() - 1;end = q.back() + 1;total_size = current_size;}}}}assert(ans != 0);std::ostringstream oss;oss << ans << "," << start + 1 << "," << end + 1;return oss.str();
}int main() {std::cout << (solution(8, 15000, {1000, 3000, 2000, 4000, 3000, 2000, 4000, 2000}) == "2,1,5") << std::endl;std::cout << (solution(8, 15000, {2000, 5000, 2000, 1000, 4000, 2000, 4000, 3000}) == "2,4,8") << std::endl;std::cout << (solution(5, 10000, {3000, 4000, 1000, 5000, 2000}) == "1,1,3") << std::endl;std::cout << (solution(6, 8000, {1000, 2000, 3000, 4000, 500, 2500}) == "1,3,5") << std::endl;std::cout << (solution(10, 5000, {500, 1000, 1500, 500, 500, 1000, 1500, 500, 500, 1000}) == "1,2,4") << std::endl;return 0;
}
运行结果:
相关文章:
AI刷题-蛋糕工厂产能规划、优质章节的连续选择
挑两个简单的写写 目录 一、蛋糕工厂产能规划 问题描述 输入格式 输出格式 解题思路: 问题理解 数据结构选择 算法步骤 关键点 最终代码: 运行结果:编辑 二、优质章节的连续选择 问题描述 输入格式 输出格式 解题思路&a…...
在线可编辑Excel
1. Handsontable 特点: 提供了类似 Excel 的表格编辑体验,包括单元格样式、公式计算、数据验证等功能。 支持多种插件,如筛选、排序、合并单元格等。 轻量级且易于集成到现有项目中。 具备强大的自定义能力,可以调整外观和行为…...
什么是词嵌入?Word2Vec、GloVe 与 FastText 的区别
自然语言处理(NLP)领域的核心问题之一,是如何将人类的语言转换成计算机可以理解的数值形式,而词嵌入(Word Embedding)正是为了解决这个问题的重要技术。本文将详细讲解词嵌入的概念及其经典模型(Word2Vec、GloVe 和 FastText)的原理与区别。 1. 什么是词嵌入(Word Em…...
WPS数据分析000010
基于数据透视表的内容 一、排序 手动调动 二、筛选 三、值显示方式 四、值汇总依据 五、布局和选项 不显示分类汇总 合并居中带标签的单元格 空单元格显示 六、显示报表筛选页...
Qt中QVariant的使用
1.使用QVariant实现不同类型数据的相加 方法:通过type函数返回数值的类型,然后通过setValue来构造一个QVariant类型的返回值。 函数: QVariant mainPage::dataPlus(QVariant a, QVariant b) {QVariant ret;if ((a.type() QVariant::Int) &a…...
Avalonia UI MVVM DataTemplate里绑定Command
Avalonia 模板里面绑定ViewModel跟WPF写法有些不同。需要单独绑定Command. WPF里面可以直接按照下面的方法绑定DataContext. <Button Content"Button" Command"{Binding DataContext.ClickCommand, RelativeSource{RelativeSource AncestorType{x:Type User…...
动态规划DP 数字三角型模型 最低通行费用(题目详解+C++代码完整实现)
最低通行费用 原题链接 AcWing 1018. 最低同行费用 题目描述 一个商人穿过一个 NN的正方形的网格,去参加一个非常重要的商务活动。 他要从网格的左上角进,右下角出。每穿越中间 1个小方格,都要花费 1个单位时间。商人必须在 (2N−1)个单位…...
deepseek R1的确不错,特别是深度思考模式
deepseek R1的确不错,特别是深度思考模式,每次都能自我反省改进。比如我让 它写文案: 【赛博朋克版程序员新春密码——2025我们来破局】 亲爱的代码骑士们: 当CtrlS的肌肉记忆遇上抢票插件,当Spring Boot的…...
Linux 常用命令 - sort 【对文件内容进行排序】
简介 sort 命令源于英文单词 “sort”,表示排序。其主要功能是对文本文件中的行进行排序。它可以根据字母、数字、特定字段等不同的标准进行排序。sort 通过逐行读取文件(没有指定文件或指定文件为 - 时读取标准输入)内容,并按照…...
MyBatis最佳实践:提升数据库交互效率的秘密武器
第一章:框架的概述: MyBatis 框架的概述: MyBatis 是一个优秀的基于 Java 的持久框架,内部对 JDBC 做了封装,使开发者只需要关注 SQL 语句,而不关注 JDBC 的代码,使开发变得更加的简单MyBatis 通…...
选择困难?直接生成pynput快捷键字符串
from pynput import keyboard# 文档:https://pynput.readthedocs.io/en/latest/keyboard.html#monitoring-the-keyboard # 博客(pynput相关源码):https://blog.csdn.net/qq_39124701/article/details/145230331 # 虚拟键码(十六进制):https:/…...
DeepSeek-R1:强化学习驱动的推理模型
1月20日晚,DeepSeek正式发布了全新的推理模型DeepSeek-R1,引起了人工智能领域的广泛关注。该模型在数学、代码生成等高复杂度任务上表现出色,性能对标OpenAI的o1正式版。同时,DeepSeek宣布将DeepSeek-R1以及相关技术报告全面开源。…...
国内优秀的FPGA设计公司主要分布在哪些城市?
近年来,国内FPGA行业发展迅速,随着5G通信、人工智能、大数据等新兴技术的崛起,FPGA设计企业的需求也迎来了爆发式增长。很多技术人才在求职时都会考虑城市的行业分布和发展潜力。因此,国内优秀的FPGA设计公司主要分布在哪些城市&a…...
3.日常英语笔记
screening discrepancies 筛选差异 The team found some screening discrepancies in the data. 团队在数据筛选中发现了些差异。 Don’t tug at it ,or it will fall over and crush you. tug 拉,拽,拖 He tugged the door open with all his might…...
基于RIP的MGRE实验
实验拓扑 实验要求 按照图示配置IP地址配置静态路由协议,搞通公网配置MGRE VPNNHRP的配置配置RIP路由协议来传递两端私网路由测试全网通 实验配置 1、配置IP地址 [R1]int g0/0/0 [R1-GigabitEthernet0/0/0]ip add 15.0.0.1 24 [R1]int LoopBack 0 [R1-LoopBack0]i…...
【开源免费】基于Vue和SpringBoot的美食推荐商城(附论文)
本文项目编号 T 166 ,文末自助获取源码 \color{red}{T166,文末自助获取源码} T166,文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…...
Pandas DataFrame 拼接、合并和关联
拼接:使用 pd.concat(),可以沿着行或列方向拼接 DataFrame。 合并:使用 pd.merge(),可以根据一个或多个键进行不同类型的合并(左连接、右连接、全连接、内连接)。 关联:使用 join() 方法,通常在设置了索引的 DataFrame 上进行关联操作。 concat拼接 按列拼接 df1 = …...
【Redis】Redis修改连接数参数
1.重启操作背景 Redis数据库连接数上限,需要修改配置文件里maxclients参数,修改后需重启数据库 1.1、修改操作系统open files参数 1.2、修改redis连接数 2.登录操作系统 登录堡垒机 ssh {ip}3.查看当前状态 3.1、查看操作系统配置 ulimit -a3.2、…...
scratch变魔术 2024年12月scratch三级真题 中国电子学会 图形化编程 scratch三级真题和答案解析
目录 scratch变魔术 一、题目要求 1、准备工作 2、功能实现 二、案例分析 1、角色分析 2、背景分析 3、前期准备 三、解题思路 1、思路分析 2、详细过程 四、程序编写 五、考点分析 六、 推荐资料 1、入门基础 2、蓝桥杯比赛 3、考级资料 4、视频课程 5、py…...
51单片机开发:点阵屏显示数字
实验目标:在8x8的点阵屏上显示数字0。 点阵屏的原理图如下图所示,点阵屏的列接在P0端口,行接在74HC595扩展的DP端口上。 扩展口的使用详见:51单片机开发:IO扩展(串转并)实验-CSDN博客 要让点阵屏显示数字࿰…...
HTML 语义化
目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案: 语义化标签: <header>:页头<nav>:导航<main>:主要内容<article>&#x…...
【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15
缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下: struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...
使用VSCode开发Django指南
使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...
【机器视觉】单目测距——运动结构恢复
ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛…...
华为OD机试-食堂供餐-二分法
import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...
如何将联系人从 iPhone 转移到 Android
从 iPhone 换到 Android 手机时,你可能需要保留重要的数据,例如通讯录。好在,将通讯录从 iPhone 转移到 Android 手机非常简单,你可以从本文中学习 6 种可靠的方法,确保随时保持连接,不错过任何信息。 第 1…...
深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南
🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...
网络编程(UDP编程)
思维导图 UDP基础编程(单播) 1.流程图 服务器:短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...
RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文全面剖析RNN核心原理,深入讲解梯度消失/爆炸问题,并通过LSTM/GRU结构实现解决方案,提供时间序列预测和文本生成…...
OPENCV形态学基础之二腐蚀
一.腐蚀的原理 (图1) 数学表达式:dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一,腐蚀跟膨胀属于反向操作,膨胀是把图像图像变大,而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...
