小米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
繁體地址,請注明出處:http://hk.pswp.cn/diannao/84467.shtml
英文地址,請注明出處:http://en.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;恰似海德格爾所說的"存在之鏡"。黑格爾辯證法在此顯現為動…