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

news2025/6/8 7:37:37

一、题目

给一个长度为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 % x

if remainder == 0:
    print(0)
else:
    dp = [float('inf')] * x
    dp[remainder] = 0

    for 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 += x
                new_dp[new_remainder] = min(new_dp[new_remainder], dp[i] + 1)
                # 不删除当前元素
                new_remainder_add = (i + num) % x
                new_dp[new_remainder_add] = min(new_dp[new_remainder_add], dp[i])
        dp = new_dp

    min_operations = min(dp[0], len(a))  # 最坏情况下删除所有元素
    print(min_operations)

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

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

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

相关文章

部署Gitlab-CE with Docker私有云环境

应用环境 Ubuntu 20.04.6 LTS (GNU/Linux 5.15.0-139-generic x86_64) Docker version 28.1.1, build 4eba377 文章目录 拉取容器镜像生成Run脚本参数解读实例脚本环境配置管理员密码遗忘服务邮箱配置邮件测试 运维问题集锦(1) 端口映射关系(2) 服务日志(3) 分支受保护 项目操作…

拉普拉斯高斯(LoG)滤波器掩模的注意事项

目录 问题&#xff1a; 解答&#xff1a; 一、高斯函数归一化&#xff1a;消除幅度偏差 1. 归一化的定义 2. 为何必须归一化&#xff1f; 二、拉普拉斯系数和为零&#xff1a;抑制直流项干扰 1. 拉普拉斯算子的特性 2. 系数和不为零的后果 三、直流项如何影响零交叉点&…

铠大师:让用户畅享多元应用,助力鸿蒙生态发展

在全球信息技术产业格局加速重构的背景下&#xff0c;中国科技力量正以开放包容的姿态重塑操作系统生态范式。 5月19日&#xff0c;华为在成都举办的nova14系列及鸿蒙电脑新品发布会上&#xff0c;正式对外发布搭载了鸿蒙系统的笔记本电脑HUAWEI MateBook Pro与HUAWEI MateBoo…

基于aspnet,微信小程序,mysql数据库,在线微信小程序汽车故障预约系统

详细视频:【基于aspnet,微信小程序,mysql数据库,在线微信小程序汽车故障预约系统。-哔哩哔哩】 https://b23.tv/zfqLWPV

如何使用AI搭建WordPress网站

人工智能正迅速成为包括网页设计在内的许多行业在其功能设置中添加的一种工具。在数字设计和营销领域&#xff0c;许多成熟的工具都在其产品中添加了人工智能功能。WordPress 也是如此。作为目前最流行的网站建设工具之一&#xff0c;WordPress 的人工智能插件越来越多也就不足…

Java并发编程:全面解析锁策略、CAS与synchronized优化机制

一、六种锁策略场景化解析 1. 乐观锁 vs 悲观锁&#xff1a;图书馆借书的两种策略 核心差异&#xff1a;对资源是否会被抢占的预期不同。 乐观锁&#xff08;假设冲突概率低&#xff09; → 行为&#xff1a;直接去书架上拿书&#xff08;围绕加锁要做的工作更少&#xff09…

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…

[爬虫知识] IP代理

相关实战案例&#xff1a;[爬虫实战] 代理爬取&#xff1a;小白也能看懂怎么用代理 相关爬虫专栏&#xff1a;JS逆向爬虫实战 爬虫知识点合集 爬虫实战案例 引言&#xff1a;爬虫与IP封锁的攻防战 对网络爬虫而言&#xff0c;遇到的一个较棘手的问题就是封IP&#xff1a;请…

6个月Python学习计划 Day 1 - Python 基础入门 开发环境搭建

6个月Python学习计划&#xff1a;从入门到AI实战&#xff08;前端开发者进阶指南&#xff09; &#x1f3af; 今日目标 理解 Python 的背景和用途安装 Python 开发环境熟悉基本语法&#xff1a;变量、数据类型、打印输出动手编写第一个 Python 程序 &#x1f9e0; 学习内容详…

GraphPad Prism工作表的基本操作

《2025新书现货 GraphPad Prism图表可视化与统计数据分析&#xff08;视频教学版&#xff09;雍杨 康巧昆 清华大学出版社教材书籍 9787302686460 GraphPadPrism图表可视化 无规格》【摘要 书评 试读】- 京东图书 GraphPad Prism中包含5种工作表&#xff0c;每种工作表的基本操…

成年后还能学习多少知识,由大脑的这个数量决定

撰文&#xff5c;Anne Trafton 编译&#xff5c;郑添惺 审校&#xff5c;clefable 麻省理工学院&#xff08;MIT&#xff09;的一些神经科学家发现&#xff0c;成年的大脑中含有数百万个“静默突触”&#xff08;silent synapses&#xff09;。它们是神经元之间未成熟的神经突…

MySQL连接错误解决方案:Can‘t connect to MySQL server on ‘localhost‘ (10038)

错误描述 当您尝试连接MySQL数据库时&#xff0c;可能会遇到以下错误提示&#xff1a; 这个错误表明客户端无法连接到本地MySQL服务器。 可能的原因 MySQL服务未启动 MySQL配置问题 防火墙或安全软件阻止连接 端口被占用或未正确配置 网络连接问题 解决方案 方法一&am…

CSS相关知识

1.清除浮动的方法 2.定位 静态定位相当于标准流 相对定位不脱离文档流&#xff0c;仍然占据原来的位置&#xff08;最频繁的作用是给绝对定位当爹&#xff09; 绝对定位脱离文档标准流&#xff0c;不再占有原来位置 3.BFC 1. 解决浮动元素导致的父容器高度塌陷 2. 阻止相邻元…

AI扫描王APP:高效便捷的手机扫描工具,让生活更智能

AI扫描王APP是一款功能强大的手机扫描软件&#xff0c;专为追求高效、便捷的用户设计。它不仅支持文字提取和扫描翻译&#xff0c;还能进行测量&#xff0c;满足用户在不同场景下的需求。无论是办公、学习还是日常使用&#xff0c;AI扫描王都能帮助你快速完成任务&#xff0c;节…

《仿盒马》app开发技术分享-- 原生地图展示(端云一体)

开发准备 上一节我们实现了获取当前用户的位置&#xff0c;并且成功的拿到了经纬度&#xff0c;这一节我们就要根据拿到的经纬度&#xff0c;结合我们其他的知识点来实现地图的展示。 功能分析 地图的展示&#xff0c;我们需要在管理中心先给我们对应的应用开启地图api功能&…

IP、子网掩码、默认网关、DNS

IP、子网掩码、默认网关、DNS 1. 概述1.1 windows配置处 2.IP 地址&#xff08;Internet Protocol Address&#xff09;2.1 公网ip2.2 内网ip2.3 &#x1f310; 公网 IP 与内网 IP 的关系&#xff08;NAT&#xff09; 3. 子网掩码&#xff08;Subnet Mask&#xff09;4. 默认网…

华为OD机试真题——字符串加密 (2025B卷:100分)Java/python/JavaScript/C/C++/GO最佳实现

2025 B卷 100分 题型 本专栏内全部题目均提供Java、python、JavaScript、C、C++、GO六种语言的最佳实现方式; 并且每种语言均涵盖详细的问题分析、解题思路、代码实现、代码详解、3个测试用例以及综合分析; 本文收录于专栏:《2025华为OD真题目录+全流程解析+备考攻略+经验分…

角度回归——八参数检测四边形Gliding Vertex

文章目录 一、介绍&#xff08;一&#xff09;五参数检测方法&#xff08; 基于角度&#xff09;&#xff08;二&#xff09;八参数检测方法&#xff08;point-based&#xff09;的边界 二、方案分析&#xff08;一&#xff09;问题定义&#xff08;二&#xff09;方案&#xf…

AI助力,制作视频裁剪软件

1. 视频裁剪软件套路多 最近再做一些测试&#xff0c;经常需要录屏什么的&#xff0c;有时候录制的时长视频&#xff0c;需要裁剪&#xff0c;比如去掉开头一些帧或者结尾的一些帧&#xff0c;就想保留关键点。但是网上下的一些软件&#xff0c;打开一用都是要付费的。所以想着…

[实战]用户系统-2-完善登录和校验以及VIP

这里写目录标题 完善登录和校验新建lib-auth创建配置引入配置和JWT完善登录基本登录单点登录多点登录校验和拦截编写守卫编写装饰器使用完善VIP修改mysql模型编写vip守卫代码进度完善登录和校验 之前我们模拟过用户的登录,本节将实现token的生成,校验,redis做黑名单。我们需…