大礼包 - 华为机试真题题解

考试平台: 时习知

分值: 200分(第二题)

考试时间: 2024-01-31 (两小时)

alt

题目描述

某公司针对新用户推出大礼包,从任意一天注册开始,连续登陆 x 天,每天可以领取一定的金币。

领取金币的数量与该公司新设计的虚拟世界的日历相关,该日历一年有 n 个月,第 i 个月有 d i d_i di 天,每一年都一样。

在每个月第一天会得到1个金币,第二天会得到 2个金币,第三天会得到 3 个金币…,后面依次类推。

请计算新用户注册后连续登陆 x 天,最多可以获取多少金币。

输入

第一行包含两个整数 nx ($1 \le n \le 2 * 10^5 $),分别表示一年中的月数和连续登陆的天数。

第二行包含n 个整数 d l , d 2 , . . . , d n d_l,d_2,...,d_n dl,d2,...,dn 、 $di $ 表示第 i 个月的天数 ( 1 ≤ d i ≤ 1 0 6 1 \le d_i \le 10^6 1di106)。

用例保证, 1 ≤ x ≤ d 1 + d 2 + . . . + d n 1 \le x \le d_1 + d_2 + ... + d_n 1xd1+d2+...+dn

输出

打印新用户连续登陆x天最多可以获取的金币数量。

示例1

输入:
3 2
1 3 2输出:
5解释: 
一年中每天获取的金币数是{1,1,2,3,1} (对应每个月中的天数)。如果在一年中的第3天开始注册登陆,最多可以获取 2+3=5个金币。

示例2

输入:
3 6
3 3 3输出:
12解释: 
一年中每天获取的金币数是{1,2,3,1,2,3,1,2,3} (对应每个月中的天数)。如果在一年中的第3天开始注册登陆,最多可以获取3+1+2+3+1十2=12 个金币。

示例3

输入:
5 6
4 2 3 1 3输出:
15解释: 
一年中每天获取的金币数是{1,2,3,4,1,2,1,2,3,1,1,2,3} (对应每个月中的天数)。如果在一年中的第12天开始注册登陆,最多可以获2+3+1+2+3+4=15个金币。

Python 题解

该题使用滑动窗口求解。

解题思路:

  1. 由于题目中有一年的日历,考虑将月份 * 2 进行处理,相当于一个环,方便处理从年底再往后走的情况。
  2. 使用两个指针,left_idxright_idx 分别表示左边界和右边界,left_numright_num 分别表示左边界和右边界当前所在月份的天数。
  3. 首先,扩大窗口到 x,即计算连续登陆 x 天所能获取的金币数。
  4. 然后,保持窗口大小,尝试将最大金币数记录下来。通过不断右移左右指针,计算窗口内的金币数,同时记录最大金币数。
  5. 最后返回最大金币数。

Python 题解

from typing import Listdef solve(n: int, x: int, d: List[int]) -> int:coin_sum = 0  # 当前金币数left_idx, left_num = 0, 1  # 左边界right_idx, right_num = 0, 1  # 右边界# 一、 扩大窗口到 xwindow = 0while window < x and right_idx < n:if right_num == 1 and window + d[right_idx] <= x:coin_sum += (1 + d[right_idx]) * d[right_idx] / 2window += d[right_idx]right_idx += 1else:   # 按天进行右移右指针if right_num <= d[right_idx]:coin_sum += right_numwindow += 1right_num += 1if right_num > d[right_idx]:  # 当前月已过,跳到下个月right_idx += 1right_num = 1# 二、保持窗口(同时左右指针右移动),尝试将最大金币数记录下来# 数据量较大,因此不能一步一步的移动max_coin = coin_sum  # 最大金币数while right_idx < n:left_step = d[left_idx] - left_num + 1     # 左指针可以移动的步数right_step = d[right_idx] - right_num + 1  # 右指针可以移动的步数step = min(left_step, right_step)  # 取最小步数# 总金币变化 = 右侧增加的金币 - 左侧减少的金币# coin_change = (right_num + right_num + step) * step / 2 - (left_num + left_num + step) * step / 2# = (right_num - left_num) * stepcoin_sum += (right_num - left_num) * stepmax_coin = max(max_coin, coin_sum)# 窗口向右移动 stepleft_num += stepright_num += stepif left_num > d[left_idx]:  # 当前月已过,跳到下个月left_idx += 1left_num = 1if right_num > d[right_idx]:  # 当前月已过,跳到下个月right_idx += 1right_num = 1return int(max_coin)if __name__ == "__main__":# 一年中的月数和连续登陆的天数n, x = map(int, input().split())# 每月份的天数d = list(map(int, input().split()))# 因为从年底再往后走又走到年初, 相当于一个环# 为了能遍历到所有的情况,将月份 * 2 进行处理print(solve(2 * n, x, d + d))

🙏整理题解不易, 如果有帮助到您,请给点个赞 ‍❤️‍ 和收藏 ⭐,让更多的人看到。🙏🙏🙏

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

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

相关文章

AES算法:数据传输的安全保障

在当今数字化时代&#xff0c;数据安全成为了一个非常重要的问题。随着互联网的普及和信息技术的发展&#xff0c;我们需要一种可靠的加密算法来保护我们的敏感数据。Advanced Encryption Standard&#xff08;AES&#xff09;算法应运而生。本文将介绍AES算法的优缺点、解决了…

Unity引擎学习笔记之【动画剪辑和曲线操作】

动画剪辑和曲线Animation Clip 点选一个包含动画的FBX模型&#xff0c;在其检查器中便可查看动画剪辑 一、动画剪辑 1.Model 2.RIg 538.jpg%20%3D600x&pos_idimg-st6QJc3x-1707050419493) 无动画、旧版Animation动画、普通道具或角色动画、人形角色动画 3.Animation 二…

【动态规划】【树形dp】【C++算法】968监控二叉树

作者推荐 【动态规划】【字符串】【表达式】2019. 解出数学表达式的学生分数 本文涉及知识点 动态规划汇总 LeetCode:968监控二叉树 给定一个二叉树&#xff0c;我们在树的节点上安装摄像头。 节点上的每个摄影头都可以监视其父对象、自身及其直接子对象。 计算监控树的所…

卷死同行!!CSDN博客中所有专栏支持24h无条件退款了。

现在找工作很卷、学习也很卷、做知识付费卖文章卖课也很卷。卷主要提现在内容质量上、内容数量上、售前咨询上(咱有专属客服)、售后服务上… 在CSDN既定的平台下&#xff0c;不能打折、不能设置优惠券、不能改价格、也没有退款按钮的情况下&#xff0c;如何去卷呢&#xff1f;…

[ChatGPT们】ChatGPT 如何辅助编程初探

主页&#xff1a;元存储的博客 全文 9000 字&#xff0c; 原创请勿转载。 我没有写过诗&#xff0c;但有人说我的代码像诗一样优雅 -- 雷军 图片来源&#xff1a;https://www.bilibili.com/video/BV1zL411X7oS/ 1. 引言 作为一个程序员&#xff0c;我们不仅要熟悉各种编程语…

智能决策的艺术:探索商业分析的最佳工具和方法

文章目录 一、引言二、商业分析思维概述三、数据分析在商业实践中的应用四、如何培养商业分析思维与实践能力五、结论《商业分析思维与实践&#xff1a;用数据分析解决商业问题》亮点内容简介作者简介目录获取方式 一、引言 随着大数据时代的来临&#xff0c;商业分析思维与实…

新年心愿清单怎么写 用这个软件列心愿清单更方便

新年的钟声在耳畔回荡&#xff0c;我站在窗前&#xff0c;看着外面熙熙攘攘的人群&#xff0c;心中充满了期待。新的一年&#xff0c;新的开始&#xff0c;我有很多心愿想要实现。于是&#xff0c;我决定写下一份心愿清单&#xff0c;给来年定下奋斗的方向。 但是&#xff0c;…

LLM应用开发与落地:使用gradio十分钟搭建聊天UI

一、背景 如果你是做LLM应用开发的&#xff0c;特别是做后端开发&#xff0c;你一定会遇到怎么快速写一个聊天UI界面来调试prompt或agent的问题。这时候的你可能在苦恼中&#xff0c;毕竟react.js, next.js, css, html也不是每个人都那么熟练&#xff0c;对吧&#xff1f;即使…

CSP-202309-2-坐标变换(其二)

一、遇到问题&#xff1a;迭代计算时间超限 按照常规思路&#xff0c;可以从begin到end逐步计算&#xff0c;共需要约end-begin次运算&#xff0c;时间复杂度较高&#xff0c;导致时间超限。 二、解决思路&#xff1a;累积 1.操作数累积部分 在输入阶段&#xff0c;代码通过…

springboot基于javaWEB的旅游推荐系统设计与实现+vue

随着人民生活水平的提高&#xff0c;对于旅游的需求越来越强烈。目前传统旅游的模式已经无法满足当前消费者的旅游需求。通过分析传统旅游的缺点&#xff0c;我们可以明确传统旅游业无法满足日益多元化的消费者。在消费者追求更加个性化的旅游体验之下&#xff0c;旅游网站就能…

布隆过滤器有什么用?什么原理?如何使用?

1 前言 布隆过滤器相信大家没用过的话&#xff0c;也已经听过了。 布隆过滤器主要是为了解决海量数据的存在性问题。对于海量数据中判定某个数据是否存在且容忍轻微误差这一场景&#xff08;比如缓存穿透、海量数据去重&#xff09;来说&#xff0c;非常适合。 2 什么是布隆…

AI大模型专题:OWASP大语言模型应用程序十大风险V1.0

今天分享的是AI大模型系列深度研究报告&#xff1a;《AI大模型专题&#xff1a;OWASP大语言模型应用程序十大风险V1.0》。 &#xff08;报告出品方&#xff1a;OWASP&#xff09; 报告共计&#xff1a;14页 LM01:2023_ 提示词注入 描述&#xff1a;提示词注入包括绕过过滤器…

云打印机怎么连接手机?

现在越来越多的人使用手机来办公或学习。而当我们需要打印文件时,如何用云打印机连接手机就非常重要了。易绘创云打印服务非常实用&#xff0c;那么易绘创云打印机又该怎么连接手机&#xff1f;下面就让我们一起来了解吧。 云打印机怎么连接手机&#xff1f; 当下云打印机连接…

SolidWorks 2023 使用操作流程

1. 把头 1.1. 新建零件 1.2. 新建草图 1.3. 拉升凸台 1.4. 等距实体 切换到锤头&#xff0c;新建草图&#xff0c;等距实体1mm 1.5. 拉升凸台 将上一个步骤的草图&#xff0c;进行特征拉升 1.6. 镜像处理 1.7. 圆角处理 1.8. 绘制凹槽 在锤子的侧面绘制草图 1.9. 挖出把手孔…

Opencv(C++)学习 TBB与OPENMP的加速效果实验与ARM上的实践(二)

在上一篇文章中&#xff0c;我们成功验证了Intel Threading Building Blocks (TBB) 与 OpenMP 在多线程并行处理方面的加速潜力。为了更深入地理解这些技术在实际应用场景中的效能提升&#xff0c;接下来我们将目光转向目标开发板环境&#xff0c;进一步探究这两种框架在嵌入式…

vulhub中spring的CVE-2022-22965漏洞复现

在JDK 9上运行的Spring MVC或Spring WebFlux应用程序可能存在通过数据绑定执行远程代码&#xff08;RCE&#xff09;的漏洞。 现在已知的利用方法要求应用程序以WAR部署的形式在Tomcat上运行&#xff0c;然而&#xff0c;该漏洞的性质更为普遍&#xff0c;可能有其他方法可以利…

[职场] 老教师对年轻教师的肺腑之言 #媒体#笔记

老教师对年轻教师的肺腑之言 对学生 不要拖堂&#xff01;不要拖堂&#xff01;不要拖堂&#xff01;临下课十分钟&#xff0c;学生已经心不在焉&#xff0c;更别说下课后了&#xff01;有什么内容等下节课再说&#xff0c;不连贯没关系&#xff0c;反正拖堂讲课他们更听不进去…

利用ReentrantLock解决死锁----以哲学家问题为例

问题描述 哲学家问题&#xff1a;其中多个哲学家在共享有限资源&#xff08;筷子&#xff09;的情况下进行工作&#xff08;思考和吃饭&#xff09;&#xff0c;这可能导致死锁。 每位哲学家需要两根筷子才能吃饭&#xff0c;而每根筷子只能被一位哲学家使用&#xff0c;这就…

91.网游逆向分析与插件开发-游戏窗口化助手-游戏窗口化助手的UI设计

内容参考于&#xff1a;易道云信息技术研究院VIP课 上一个内容&#xff1a;项目需求与需求拆解-CSDN博客 码云地址&#xff08;游戏窗口化助手 分支&#xff09;&#xff1a;https://gitee.com/dye_your_fingers/sro_-ex.git 码云版本号&#xff1a;e512d44da1b7e6a8726b1be0…

【Linux取经路】进程控制——程序替换

文章目录 一、单进程版程序替换看现象二、程序替换的基本原理三、程序替换接口学习3.1 替换自己写的可执行程序3.2 第三个参数 envp 验证四、结语一、单进程版程序替换看现象 #include <stdio.h> #