小米2025年校招笔试真题手撕(二)

一、题目

给一个长度为n的序列和一个整数x,每次操作可以选择序列中的一个元素,将其从序列中删去,或者将其值加一。

问至少操作多少次,可以使操作后的序列(可以为空)中数字之和是x的倍数。

输入描述:

第一行两个用空格隔开的正整数n和x,含义如问题描述中所述。

第二行是n个用空格隔开的正整数A[1],A[2],…,A[n],表示序列中n个元素的值。

n ≤ 1000,x ≤ 1000,A ≤ 1000

输出描述:一行一个整数,表示使序列中数字之和是x的倍数所需要的最少操作数。

样例输入1

1 3

4

样例输出:

1

解释:直接将序列中唯一的元素删去即可。

输入样例2

3 5

1 3 3

输出:

2

解释:可能的一种操作为,删去最后一个元素,再使第一个元素加一,得到的序列为2 3

二、分析

该问题要求我们找到最少的操作次数,使得经过若干次删除元素或加一操作后,序列的数字之和是给定整数x的倍数。操作包括删除一个元素或给一个元素加一,每次操作算一次。我们的目标是找到一个策略,通过这两种操作的组合,使得总和成为x的倍数,并且操作次数最少。

首先,我们需要理解问题的目标是让总和 S 满足 S ≡ 0 mod x。初始时,序列的总和为 sum。如果 sum 已经是x的倍数,那么不需要任何操作,直接返回0。否则,我们需要通过删除元素或增加元素的值来调整总和,使其成为x的倍数。

删除元素会减少总和,而加一则会增加总和。我们需要在这两种操作之间找到平衡,使得总和调整到最近的x的倍数,并且操作次数最少。

可能的策略包括:

1. **计算当前总和对x的余数**:计算初始总和 sum 对x取余得到 r。如果 r == 0,直接返回0。否则,我们需要调整总和,使其增加或减少一定的量,使得新的总和对x取余为0。

2. **考虑加一操作**:假设我们不删除任何元素,那么可以通过给某些元素加一来增加总和。需要增加的总和量为 (x - r) mod x。对于每个元素,我们可以计算将其增加到足够次数所需的操作数,使得总和增加 (x - r)。这可能适用于当总和接近x的下一个倍数时。

3. **考虑删除元素**:删除元素会减少总和。对于每个元素,我们可以计算删除它之后的新总和,并检查是否满足条件。此外,可能需要结合删除多个元素的情况。

4. **尝试所有可能的组合**:对于较小的n和x,可以尝试所有可能的删除和加一的组合,找到操作次数最少的方案。但这种方法在n较大时效率较低。

5. **动态规划**:可以考虑动态规划的方法,记录达到某个余数所需的最小操作次数。例如,我们可以维护一个数组 dp,其中 dp[i] 表示达到余数i所需的最小操作次数。初始时,dp[sum % x] = 0。然后,对于每个元素,我们可以更新 dp 数组,考虑加一或删除该元素后的效果。

在实现时,我们需要综合考虑上述策略,并选择最适合问题规模的方法。对于题目给定的约束条件(n ≤ 1000,x ≤ 1000,A ≤ 1000),动态规划可能是一个可行的选择。

以样例输入1为例:

输入:
1 3
4

初始总和是4,4 mod 3 = 1。我们需要调整总和到3的倍数。可以选择删除唯一的元素,操作次数为1,或者给该元素加2次达到6(3的倍数),操作次数为2。因此,最少操作次数是1。

样例输入2:

输入:
3 5
1 3 3

初始总和是7,7 mod 5 = 2。我们需要调整总和到5的倍数。可能的策略是删除最后一个3(总和变为4),然后给第一个元素加1(总和变为5,操作次数2)。或者有其他组合,但最少操作次数是2。

在代码实现中,我们需要遍历所有可能的操作组合,并找到操作次数最少的方案。这可能需要尝试所有可能的删除元素的子集,并计算对应的加一操作次数,或者使用动态规划来记录最小操作次数。

三、代码

说起来你们可能不信,这段代码是军哥给我的

n, x = map(int, input().split())
a = list(map(int, input().split()))sum_a = sum(a)
remainder = sum_a % xif remainder == 0:print(0)
else:dp = [float('inf')] * xdp[remainder] = 0for num in a:new_dp = dp.copy()for i in range(x):if dp[i] != float('inf'):# 删除当前元素new_remainder = i - (num % x)if new_remainder < 0:new_remainder += xnew_dp[new_remainder] = min(new_dp[new_remainder], dp[i] + 1)# 不删除当前元素new_remainder_add = (i + num) % xnew_dp[new_remainder_add] = min(new_dp[new_remainder_add], dp[i])dp = new_dpmin_operations = min(dp[0], len(a))  # 最坏情况下删除所有元素print(min_operations)

这段代码首先计算初始总和对x的余数。然后使用动态规划的方法来记录达到每个可能的余数所需的最小操作次数。对于每个元素,考虑两种情况:删除该元素或不删除该元素,更新动态规划数组。最后,取达到余数0所需的最小操作次数,或者删除所有元素的操作次数(作为最坏情况)。

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

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

相关文章

CNN卷积神经网络到底卷了啥?

参考视频&#xff1a;卷积神经网络&#xff08;CNN&#xff09;到底卷了啥&#xff1f;8分钟带你快速了解&#xff01; 我们知道&#xff1a; 图片是由像素点构成&#xff0c;即最终的成像效果是由背后像素的颜色数值所决定 在Excel中&#xff1a;有这样一个由数值0和1组成的66…

教师技术知识对人工智能赋能下教学效果的影响:以教学创新为中介的实证研究

教师技术知识对人工智能赋能下教学效果的影响&#xff1a;以教学创新为中介的实证研究 摘要 随着教育信息化的快速发展&#xff0c;人工智能技术在教育领域的应用日益广泛&#xff0c;为教育教学带来了深刻变革。然而&#xff0c;当前关于教师技术知识如何影响人工智能赋能下的…

Linux驱动学习笔记(九)

设备模型 1.kobject的全称为kernel object&#xff0c;即内核对象&#xff0c;每一个kobject都会对应到系统/sys/下的一个目录&#xff0c;这些目录的子目录也是一个kobject&#xff0c;以此类推&#xff0c;这些kobject构成树状关系&#xff0c;如下图&#xff1a; kobject定…

25年上半年五月之软考之设计模式

目录 一、单例模式 二、工厂模式 三、 抽象工厂模式 四、适配器模式 五、策略模式 六、装饰器模式 ​编辑 考点&#xff1a;会挖空super(coffeOpertion); 七、代理模式 为什么必须要使用代理对象&#xff1f; 和装饰器模式的区别 八、备忘录模式 一、单例模式 这个…

Python打卡第36天

浙大疏锦行 作业&#xff1a; 对之前的信贷项目&#xff0c;利用神经网络训练下&#xff0c;尝试用到目前的知识点让代码更加规范和美观。 import torch import torch.nn as nn import torch.optim as optim from sklearn.model_selection import train_test_split from sklear…

全面理解类和对象(下)

文章目录 再谈构造函数初始化列表 static概念&#xff1a; 友元友元函数友元类 内部类再次理解类和对象 再谈构造函数 class Date { public:Date(int year, int month, int day){_year year;_month month;_day day;} private:int _year;int _month;int _day; };上述代码有了…

TomatoSCI分析日记——层次聚类

TomatoSCI分析日记——层次聚类 今天介绍的是一种常见的聚类方法——层次聚类。层次聚类会将数据集划分成嵌套的簇&#xff0c;形成一个层次结构&#xff08;树状图&#xff09;&#xff0c;经常用于探究样本的相似性。用大白话来说&#xff0c;就是&#xff1a;我有一大堆样品…

mysql都有哪些锁?

MySQL中的锁机制是确保数据库并发操作正确性和一致性的重要组成部分&#xff0c;根据锁的粒度、用途和特性&#xff0c;可以分为多种类型。以下是MySQL中常见的锁及其详细说明&#xff1a; 一、按锁的粒度划分 行级锁&#xff08;Row-level Locks&#xff09; 描述&#xff1a;…

flutter 项目调试、flutter run --debug调试模式 devtools界面说明

Flutter DevTools 网页界面说明 1. 顶部导航栏 Inspector&#xff1a;查看和调试 Widget 树&#xff0c;实时定位 UI 问题。Performance-- 性能分析面板&#xff0c;查看帧率、CPU 和 GPU 使用情况&#xff0c;识别卡顿和性能瓶颈。Memory-- 内存使用和对象分配分析&#xff…

使用Kotlin创建Spring Boot用户应用项目

项目初始化与配置 通过Spring Initializr创建Kotlin项目 若需使用Kotlin语言开发Spring Boot应用(假设已安装Kotlin环境),可通过start.spring.io进行项目初始化。在项目创建页面需进行以下关键配置: 语言选择:切换至Kotlin选项项目元数据:需填写Group(如com.apress.us…

【Linux网络篇】:Socket网络套接字以及简单的UDP网络程序编写

✨感谢您阅读本篇文章&#xff0c;文章内容是个人学习笔记的整理&#xff0c;如果哪里有误的话还请您指正噢✨ ✨ 个人主页&#xff1a;余辉zmh–CSDN博客 ✨ 文章所属专栏&#xff1a;Linux篇–CSDN博客 文章目录 网络编程套接字一.预备知识1.理解源IP地址和目的IP地址2.认识端…

Python爬虫实战:研究Newspaper框架相关技术

1. 引言 1.1 研究背景与意义 互联网的快速发展使得新闻信息呈现爆炸式增长&#xff0c;如何高效地获取和分析这些新闻数据成为研究热点。新闻爬虫作为一种自动获取网页内容的技术工具&#xff0c;能够帮助用户从海量的互联网信息中提取有价值的新闻内容。本文基于 Python 的 …

【node.js】实战项目

个人主页&#xff1a;Guiat 归属专栏&#xff1a;node.js 文章目录 1. 项目概览与架构设计1.1 实战项目&#xff1a;企业级电商管理系统1.2 技术栈选择 2. 项目初始化与基础架构2.1 项目结构设计2.2 基础配置管理 3. 用户服务实现3.1 用户服务架构3.2 用户模型设计3.3 用户服务…

Mybatis框架的构建(IDEA)

选择maven项目 修改设置 在设置中添加自定义代码模板 开始写代码 动态SQL语句的示例&#xff1a; pom文件&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"…

经济法-6-公司法律制度知识点

一、出资期限 1.有限责任公司&#xff1a;全体股东需在公司成立之日起5年内缴足认缴的注册资本 2.股份有限公司&#xff1a;以发起方式设立的&#xff0c;发起人需在公司登记前实缴全部股款 3.认缴期加速到期 公司不能清偿到期债务的&#xff0c;公司或者已到期债权的债权人…

jquery.table2excel方法导出

jquery提供了一个table2excel方法可以用来导出页面到xls等 $("#grid_595607").table2excel({exclude: ".noExport", // 排除类名为 noExport 的元素filename: "导出数据.xls",exclude_img: true, // 不导出图片exclude_links: true, // 不导…

echarts设置标线和最大值最小值

echarts设置标线和最大值最小值 基本ECharts图表初始化配置 设置动态的y轴范围&#xff08;min/max值&#xff09; 通过markPoint标记最大值和最小值点 使用markLine添加水平参考线 配置双y轴图表 自定义标记点和线的样式&#xff08;颜色、符号等&#xff09; 响应式调整图表大…

Java文件操作:从“Hello World”到“Hello File”

&#x1f50d; 开发者资源导航 &#x1f50d;&#x1f3f7;️ 博客主页&#xff1a; 个人主页&#x1f4da; 专栏订阅&#xff1a; JavaEE全栈专栏 文件 什么是文件&#xff1f; 广义&#xff1a;操作系统进行资源管理的一种机制&#xff0c;很多的软件/硬件资源&#xff0c;…

2025第三届黄河流域网络安全技能挑战赛--Crypto--WriteUp

2025第三届黄河流域网络安全技能挑战赛–Crypto–WriteUp Crypto sandwitch task from Crypto.Util.number import * import gmpy2 flag bflag{fake_flag} assert len(flag) 39 p getPrime(512) q getPrime(512) n p * q e 0x3 pad1 beasy_problem pad2 bHow_to_so…

三重天理论

第一重天&#xff1a;公理层&#xff08;形而上地基&#xff09; 这里构建的是人类理性的"操作系统"&#xff0c;公理作为不证自明的逻辑起点&#xff08;如矛盾律/同一律&#xff09;&#xff0c;恰似海德格尔所说的"存在之镜"。黑格尔辩证法在此显现为动…