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博客 要让点阵屏显示数字࿰…...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...
Spring Boot 实现流式响应(兼容 2.7.x)
在实际开发中,我们可能会遇到一些流式数据处理的场景,比如接收来自上游接口的 Server-Sent Events(SSE) 或 流式 JSON 内容,并将其原样中转给前端页面或客户端。这种情况下,传统的 RestTemplate 缓存机制会…...
Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...
【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】
1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...
第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词
Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid,其中有多少个 3 3 的 “幻方” 子矩阵&am…...
项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)
Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...
python报错No module named ‘tensorflow.keras‘
是由于不同版本的tensorflow下的keras所在的路径不同,结合所安装的tensorflow的目录结构修改from语句即可。 原语句: from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后: from tensorflow.python.keras.lay…...
08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险
C#入门系列【类的基本概念】:开启编程世界的奇妙冒险 嘿,各位编程小白探险家!欢迎来到 C# 的奇幻大陆!今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类!别害怕,跟着我,保准让你轻松搞…...
从 GreenPlum 到镜舟数据库:杭银消费金融湖仓一体转型实践
作者:吴岐诗,杭银消费金融大数据应用开发工程师 本文整理自杭银消费金融大数据应用开发工程师在StarRocks Summit Asia 2024的分享 引言:融合数据湖与数仓的创新之路 在数字金融时代,数据已成为金融机构的核心竞争力。杭银消费金…...
Oracle11g安装包
Oracle 11g安装包 适用于windows系统,64位 下载路径 oracle 11g 安装包...
