当前位置: 首页 > news >正文

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 个蛋糕。目标是计算出最少需要多少天才能完成生产计划。

数据结构选择

由于我们需要动态地调整机器和工人的数量,并且需要计算每天的生产量和剩余蛋糕数,因此我们可以使用一个循环来模拟每一天的生产过程。

算法步骤

  1. 初始化

    • 初始机器数量 m
    • 初始工人数量 w
    • 每天的生产成本 p
    • 目标生产量 n
    • 当前天数 days
    • 当前剩余蛋糕数 cakes
  2. 循环模拟每一天

    • 计算当天的生产量 production = m * w
    • 更新剩余蛋糕数 cakes += production
    • 检查是否已经达到目标生产量 n,如果是,则返回当前天数 days
    • 计算可以购买的机器和工人的最大数量 max_buy = cakes / p
    • 尝试用剩余的蛋糕购买机器和工人,使得 m * w 最大化
    • 更新机器和工人的数量
    • 增加一天 days++
  3. 返回结果

    • 当达到或超过目标生产量 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)

 

解题思路:

问题理解

  1. 目标:从一本书的连续章节中挑选出总字数不超过 k 的章节,使得优质章节(比前后章节字数都多的章节)的数量最多。
  2. 约束
    • 章节必须是连续的。
    • 总字数不超过 k
    • 优质章节不能是挑选出来的第一个或最后一个章节。

数据结构选择

  • 数组:用于存储每个章节的字数。
  • 滑动窗口:用于在数组中寻找满足条件的连续子数组。

算法步骤

  1. 初始化

    • 使用两个指针 start 和 end 来表示当前窗口的开始和结束位置。
    • 使用变量 current_sum 来记录当前窗口的总字数。
    • 使用变量 best_start 和 best_end 来记录最优解的开始和结束位置。
    • 使用变量 best_quality_count 来记录最优解中的优质章节数量。
  2. 滑动窗口

    • 从左到右遍历数组,逐步扩展 end 指针,直到总字数超过 k
    • 当总字数超过 k 时,移动 start 指针,直到总字数再次小于等于 k
    • 在每次移动 end 指针时,检查当前窗口内的优质章节数量,并更新最优解。
  3. 优质章节判断

    • 对于每个窗口,遍历其中的章节,判断是否为优质章节(比前后章节字数都多)。
    • 注意:第一个和最后一个章节不能作为优质章节。
  4. 结果输出

    • 最终输出最优解的优质章节数量、开始位置和结束位置。

最终代码:

#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刷题-蛋糕工厂产能规划、优质章节的连续选择

挑两个简单的写写 目录 一、蛋糕工厂产能规划 问题描述 输入格式 输出格式 解题思路&#xff1a; 问题理解 数据结构选择 算法步骤 关键点 最终代码&#xff1a; 运行结果&#xff1a;​编辑 二、优质章节的连续选择 问题描述 输入格式 输出格式 解题思路&a…...

在线可编辑Excel

1. Handsontable 特点&#xff1a; 提供了类似 Excel 的表格编辑体验&#xff0c;包括单元格样式、公式计算、数据验证等功能。 支持多种插件&#xff0c;如筛选、排序、合并单元格等。 轻量级且易于集成到现有项目中。 具备强大的自定义能力&#xff0c;可以调整外观和行为…...

什么是词嵌入?Word2Vec、GloVe 与 FastText 的区别

自然语言处理(NLP)领域的核心问题之一,是如何将人类的语言转换成计算机可以理解的数值形式,而词嵌入(Word Embedding)正是为了解决这个问题的重要技术。本文将详细讲解词嵌入的概念及其经典模型(Word2Vec、GloVe 和 FastText)的原理与区别。 1. 什么是词嵌入(Word Em…...

WPS数据分析000010

基于数据透视表的内容 一、排序 手动调动 二、筛选 三、值显示方式 四、值汇总依据 五、布局和选项 不显示分类汇总 合并居中带标签的单元格 空单元格显示 六、显示报表筛选页...

Qt中QVariant的使用

1.使用QVariant实现不同类型数据的相加 方法&#xff1a;通过type函数返回数值的类型&#xff0c;然后通过setValue来构造一个QVariant类型的返回值。 函数&#xff1a; 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的正方形的网格&#xff0c;去参加一个非常重要的商务活动。 他要从网格的左上角进&#xff0c;右下角出。每穿越中间 1个小方格&#xff0c;都要花费 1个单位时间。商人必须在 (2N−1)个单位…...

deepseek R1的确不错,特别是深度思考模式

deepseek R1的确不错&#xff0c;特别是深度思考模式&#xff0c;每次都能自我反省改进。比如我让 它写文案&#xff1a; 【赛博朋克版程序员新春密码——2025我们来破局】 亲爱的代码骑士们&#xff1a; 当CtrlS的肌肉记忆遇上抢票插件&#xff0c;当Spring Boot的…...

Linux 常用命令 - sort 【对文件内容进行排序】

简介 sort 命令源于英文单词 “sort”&#xff0c;表示排序。其主要功能是对文本文件中的行进行排序。它可以根据字母、数字、特定字段等不同的标准进行排序。sort 通过逐行读取文件&#xff08;没有指定文件或指定文件为 - 时读取标准输入&#xff09;内容&#xff0c;并按照…...

MyBatis最佳实践:提升数据库交互效率的秘密武器

第一章&#xff1a;框架的概述&#xff1a; MyBatis 框架的概述&#xff1a; MyBatis 是一个优秀的基于 Java 的持久框架&#xff0c;内部对 JDBC 做了封装&#xff0c;使开发者只需要关注 SQL 语句&#xff0c;而不关注 JDBC 的代码&#xff0c;使开发变得更加的简单MyBatis 通…...

选择困难?直接生成pynput快捷键字符串

from pynput import keyboard# 文档&#xff1a;https://pynput.readthedocs.io/en/latest/keyboard.html#monitoring-the-keyboard # 博客(pynput相关源码)&#xff1a;https://blog.csdn.net/qq_39124701/article/details/145230331 # 虚拟键码(十六进制)&#xff1a;https:/…...

DeepSeek-R1:强化学习驱动的推理模型

1月20日晚&#xff0c;DeepSeek正式发布了全新的推理模型DeepSeek-R1&#xff0c;引起了人工智能领域的广泛关注。该模型在数学、代码生成等高复杂度任务上表现出色&#xff0c;性能对标OpenAI的o1正式版。同时&#xff0c;DeepSeek宣布将DeepSeek-R1以及相关技术报告全面开源。…...

国内优秀的FPGA设计公司主要分布在哪些城市?

近年来&#xff0c;国内FPGA行业发展迅速&#xff0c;随着5G通信、人工智能、大数据等新兴技术的崛起&#xff0c;FPGA设计企业的需求也迎来了爆发式增长。很多技术人才在求职时都会考虑城市的行业分布和发展潜力。因此&#xff0c;国内优秀的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 拉&#xff0c;拽&#xff0c;拖 He tugged the door open with all his might…...

基于RIP的MGRE实验

实验拓扑 实验要求 按照图示配置IP地址配置静态路由协议&#xff0c;搞通公网配置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 &#xff0c;文末自助获取源码 \color{red}{T166&#xff0c;文末自助获取源码} T166&#xff0c;文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程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数据库连接数上限&#xff0c;需要修改配置文件里maxclients参数&#xff0c;修改后需重启数据库 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单片机开发:点阵屏显示数字

实验目标&#xff1a;在8x8的点阵屏上显示数字0。 点阵屏的原理图如下图所示&#xff0c;点阵屏的列接在P0端口&#xff0c;行接在74HC595扩展的DP端口上。 扩展口的使用详见&#xff1a;51单片机开发&#xff1a;IO扩展(串转并)实验-CSDN博客 要让点阵屏显示数字&#xff0…...

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…...

<6>-MySQL表的增删查改

目录 一&#xff0c;create&#xff08;创建表&#xff09; 二&#xff0c;retrieve&#xff08;查询表&#xff09; 1&#xff0c;select列 2&#xff0c;where条件 三&#xff0c;update&#xff08;更新表&#xff09; 四&#xff0c;delete&#xff08;删除表&#xf…...

【磁盘】每天掌握一个Linux命令 - iostat

目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat&#xff08;I/O Statistics&#xff09;是Linux系统下用于监视系统输入输出设备和CPU使…...

React Native在HarmonyOS 5.0阅读类应用开发中的实践

一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强&#xff0c;React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 &#xff08;1&#xff09;使用React Native…...

WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)

一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解&#xff0c;适合用作学习或写简历项目背景说明。 &#x1f9e0; 一、概念简介&#xff1a;Solidity 合约开发 Solidity 是一种专门为 以太坊&#xff08;Ethereum&#xff09;平台编写智能合约的高级编…...

select、poll、epoll 与 Reactor 模式

在高并发网络编程领域&#xff0c;高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表&#xff0c;以及基于它们实现的 Reactor 模式&#xff0c;为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。​ 一、I…...

C# 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

JAVA后端开发——多租户

数据隔离是多租户系统中的核心概念&#xff0c;确保一个租户&#xff08;在这个系统中可能是一个公司或一个独立的客户&#xff09;的数据对其他租户是不可见的。在 RuoYi 框架&#xff08;您当前项目所使用的基础框架&#xff09;中&#xff0c;这通常是通过在数据表中增加一个…...

【笔记】WSL 中 Rust 安装与测试完整记录

#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统&#xff1a;Ubuntu 24.04 LTS (WSL2)架构&#xff1a;x86_64 (GNU/Linux)Rust 版本&#xff1a;rustc 1.87.0 (2025-05-09)Cargo 版本&#xff1a;cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...

搭建DNS域名解析服务器(正向解析资源文件)

正向解析资源文件 1&#xff09;准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2&#xff09;服务端安装软件&#xff1a;bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...