【牛客小白月賽117】E題——種類數小結

1 初步想法

1.1 前置知識:vector數組的去重操作

unique()將不重復的元素放在數組前面,重復元素移到后面,qs獲取不重復元素的后一個位置,之后用erase()函數去除重復元素。

qs=unique(a.begin()+1,a.begin()+k+1);
a.erase(qs,a.end());

1.2 模擬的解法

根據題目意思,統計數組中不同數的種類數,然后遍歷數組,每次減去種類數,直到數組中的元素只有一種為止。在實現上,我的輸入的數是從數組a下標1開始,所以我設置的循環條件是a.size()>2,因為a[0]=0,如果碰到輸入n個相同的非零整數,此時去重后元素的個數是2。

實現代碼(運行超時,只通過30%左右的數據)

#include<bits/stdc++.h>
using namespace std;
int n;
vector<long long> a(100005);
void process(){int k=a.size()-1;for(int i=1;i<=a.size();i++){if(a[i]-k>0) a[i]=a[i]-k;else a[i]=0;}vector<long long>::iterator qs;sort(a.begin()+1,a.begin()+k+1);qs=unique(a.begin()+1,a.begin()+k+1);a.erase(qs,a.end());
}
int main(){cin>>n;for(int i=1;i<=n;i++) cin>>a[i];vector<long long>::iterator qs;sort(a.begin()+1,a.begin()+n+1);qs=unique(a.begin()+1,a.begin()+n+1);a.erase(qs,a.end());long long cnt=0;while(a.size()>2){process();cnt++;}cout<<cnt;return 0;
}

不過這種解法的問題是會超時,數據規模是10的5次方,main函數的while循環加上函數process()里面也有一重循環,效率不高,要想一種新的解法。

2 新方法

2.1 新方法的思想

我設計以下測試樣例:

測試樣例1
4
100 200 300 400

對于測試樣例1,排序后,我們知道100是最先變化為0的,100在減小為0的過程中,種類數已知是4個,所以,100減為0需要進行100/4=25次操作。之后在剩下的數中,100減為0后依次變為100,200,300(是所有數同時減100),對于這里的100要變成0,因為目前數組有4,100,200,300這4種數,需要經過100/4=25次操作。之后,剩下的數以此為100,200,因為目前數組有4,100,200這3種數,100變成0需要經過100/3+1=34次操作(目前數組有),然后剩下一個數98,需要經過98/2=49次操作。一共是25+25+34+49=133次操作。通過這樣的做法我們可以降低時間復雜度。

2.2 新方法的實現

為了實現新方法,在數組各元素減為0的過程中,我們要設置幾個變量:
ans:最終結果
sum:累計減少量
cnt:當前的種類數,對于非0元素,如果不是第一個,因為前面的數已經變成0,所以非第一個數需要+1,把0算進去。cnt=a.size()-i+(i!=0);
x:表示當前的數變為0需要操作的次數,我們需要向上取整:x=(a[i]-sum+cnt-1)/cnt。

實現代碼

#include<bits/stdc++.h>  // 包含所有標準庫頭文件
#define LL long long    // 定義長整型別名
int n;
using namespace std;int main(){cin>>n;  // 輸入數組長度vector<LL> a(n);  // 創建長度為n的長整型向量for(int i=0;i<n;i++) cin>>a[i];  // 輸入數組元素// 排序并去重,確保數組是升序且無重復元素sort(a.begin(),a.end());a.erase(unique(a.begin(),a.end()),a.end());// 如果數組只有一個元素,直接輸出0if(a.size()==1)cout<<0<<endl;else{LL ans=0,sum=0,cnt=0;  // ans:結果,sum:累計減少量,cnt:當前影響的元素數量// 遍歷去重后的數組for(int i=0;i<n;i++){// 如果當前元素減去累計減少量已經小于0,跳過if(a[i]-sum<0) continue;// 計算當前影響的元素數量:剩余元素數 + (如果不是第一個元素,還包括之前的元素)cnt=a.size()-i+(i!=0);// 計算需要多少次操作才能將當前元素減為0// (a[i]-sum+cnt-1)/cnt 是向上取整的技巧LL x=(a[i]-sum+cnt-1)/cnt;ans+=x;  // 累計操作次數sum+=x*cnt;  // 更新累計減少量}cout<<ans<<endl;}return 0;
}

參考

b站講解

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/86656.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/86656.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/86656.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

linux之kylin系統nginx的安裝

一、nginx的作用 1.可做高性能的web服務器 直接處理靜態資源&#xff08;HTML/CSS/圖片等&#xff09;&#xff0c;響應速度遠超傳統服務器類似apache支持高并發連接 2.反向代理服務器 隱藏后端服務器IP地址&#xff0c;提高安全性 3.負載均衡服務器 支持多種策略分發流量…

MatAnyone本地部署,視頻分割處理,綠幕摳像(WIN/MAC)

大家好&#xff0c;今天要和大家分享的項目是MatAnyone&#xff0c;與上一篇分享的SAM2LONG類似&#xff0c;不過上次的分享沒有提到如何在 MAC 上部署&#xff0c;后來有小伙伴私信說希望能出一個 MAC 版本的。那正好看到MatAnyone這個項目順手就寫下來。該項目基于SAM2同樣可…

記錄下blog的成長過程

2025-06-11 新人榜83 2025-06-09 新人榜87 北京市原力月榜 80

C語言學習20250611

指針 指針類型 int p;》普通的整形變量int *p;》p先與*結合&#xff0c;表示p為指針&#xff0c;該指針指向的內容的數據類型為整型int p[3];》p為一個由整型數據組成的數組int *p[3];》因為[]比*優先級高&#xff0c;p先與方括號結合&#xff0c;所以p為一個數組&#xff0c…

【AI智能體】Dify 從部署到使用操作詳解

目錄 一、前言 二、Dify 介紹 2.1 Dify 是什么 2.2 Dify 核心特性 2.2.1 多模型支持 2.2.2 可視化編排工作流 2.2.3 低代碼/無代碼開發 2.3 Dify 適用場景 2.4 Dify 與Coze的對比 2.4.1 定位與目標用戶 2.4.2 核心功能對比 2.4.3 開發體驗與成本 2.4.4 適用場景對比…

Java爬蟲庫的選擇與實戰代碼

如果你的項目正在Java中考慮引入爬蟲能力&#xff0c;無論是做數據分析、信息聚合&#xff0c;還是競品監測&#xff0c;選對庫確實能大幅提升開發效率和運行效果。結合當前主流庫的特點與適用場景&#xff0c;我整理了一份更貼近實戰的對比分析&#xff0c;并附上可直接運行的…

詳細解釋aruco::markdetection _detectInitialCandidates函數

_detectInitialCandidates 是 OpenCV 的 ArUco 模塊中一個非常關鍵的函數&#xff0c;它負責檢測圖像中的候選 ArUco 標記。該函數的主要目標是&#xff1a; 使用多個尺度&#xff08;scale&#xff09;對輸入圖像進行自適應閾值處理&#xff1b;在每個尺度下提取輪廓并篩選出…

Android 開發中配置 USB 配件模式(Accessory Mode) 配件過濾器的配置

在 Android 開發中配置 USB 配件模式&#xff08;Accessory Mode&#xff09; 的配件過濾器&#xff08;accessory_filter.xml&#xff09;&#xff0c;需要以下步驟&#xff1a; 1. 創建配件過濾器文件 在項目的 res/xml/ 目錄下創建 accessory_filter.xml 文件&#xff08;若…

FreeRTOS互斥量

目錄 1.使用場合2.函數2.1 創建2.1.1 動態創建2.1.2 靜態創建 2.2 刪除2.3 釋放&#xff08;Give&#xff09;2.4 獲取&#xff08;Take&#xff09;2.5 ISR 版本注意事項 3.常規使用流程4.和二進制信號量的對比5.遞歸鎖5.1 死鎖5.2 概念5.2.1 問題5.2.2 解決方案&#xff1a;遞…

ThinkPad 交換 Ctrl 鍵和 Fn 鍵

概述 不知道那個大聰明設計的將fn設置在最左邊&#xff0c;xxx&#xff0c;我服了&#xff0c;你這個老六真惡心。 方法 一&#xff1a;BIOS/UEFI 設置&#xff08;推薦&#xff09; 重啟 你的 ThinkPad。 在啟動時按下 F1&#xff08;或 Enter&#xff0c;再按 F1&#xff0…

`dispatch_source_t` 計時器 vs `NSTimer`:核心差異一覽

維度GCD 計時器 (dispatch_source_t)NSTimer依賴機制直接掛在 GCD 隊列;底層走 Mach 內核定時源掛在 RunLoop,必須指定 RunLoop & mode線程上下文哪個隊列就在哪條線程回調(例中用 dispatch_get_main_queue())總在定時器所在的 RunLoop 線程(默認主線程 & NSDefau…

ubuntu22.04系統安裝部署docker和docker compose全過程!

更新系統包 首先&#xff0c;確保系統包是最新的&#xff1a; sudo apt updatesudo apt upgrade -y安裝依賴 安裝 Docker 所需的依賴包&#xff1a; sudo apt install -y apt-transport-https ca-certificates curl software-properties-common添加 Docker 官方 GPG 密鑰 添加…

企業如何增強終端安全?

在數字化轉型加速的今天&#xff0c;企業的業務運行越來越依賴于終端設備。從員工的筆記本電腦、智能手機&#xff0c;到工廠里的物聯網設備、智能傳感器&#xff0c;這些終端構成了企業與外部世界連接的 “神經末梢”。然而&#xff0c;隨著遠程辦公的常態化和設備接入的爆炸式…

VS2017----打開ui文件幾秒后閃退

問題描述 在vs2017中雙擊ui文件能夠打開,但是幾秒后就閃退了,提示報錯 問題解決 QT VS tools ----Options,把這個設置為True保存即可

深入解析Docker網橋模式:從docker0到容器網絡的完整通信鏈路

1. 簡介docker 網橋模式 Docker 啟動時默認創建 docker0 虛擬網橋&#xff08;Linux bridge&#xff09;&#xff0c;并分配私有 IP 地址范圍&#xff08;如 172.17.42.1/16&#xff09;&#xff0c;它的作用相當于一個虛擬交換機&#xff0c;讓宿主機和多個容器之間可以通信。…

Proof of Talk專訪CertiK聯創顧榮輝:全周期安全方案護航Web3生態

6月10日&#xff0c;CertiK聯合創始人兼CEO顧榮輝在Proof of Talk 2025舉辦期間&#xff0c;接受大會官方專訪&#xff0c;分享了他對Web3安全現狀的觀察以及CertiK的安全戰略布局。 顧榮輝指出&#xff0c;雖然安全的重要性被廣泛認可&#xff0c;但許多創業者和開發者仍存在…

再說一說LangChain Runnable接口

之前我們介紹過LangChain通過Runnable和LCEL來實現各個組件的快捷拼裝&#xff0c;整個過程就像拼積木一樣。 今天我們深入剖析Runnable接口的底層實現邏輯。 往期文章推薦: 16.Docker實戰&#xff1a;5分鐘搞定MySQL容器化部署與最佳實踐15.Ollama模板全解析&#xff1a;從基…

LLaMA-Factory微調Qwen3模型完了,怎么直接用vllm推理模型?

環境&#xff1a; LLaMA-Factory vllm0.8.5 Qwen3-8b 問題描述&#xff1a; LLaMA-Factory微調Qwen3模型完了,怎么直接用vllm推理模型&#xff1f; 解決方案&#xff1a; 一、合并 LoRA 權重與基礎模型 vLLM 需要完整的模型文件&#xff08;含合并后的權重&#xff09;…

C#AES加密

一、AES 加密概念 定義 &#xff1a;AES&#xff08;Advanced Encryption Standard&#xff0c;高級加密標準&#xff09;是一種對稱加密算法&#xff0c;由美國國家標準與技術研究院&#xff08;NIST&#xff09;于 2001 年發布&#xff0c;用于替代之前的 DES&#xff08;數據…

搞了兩天的win7批處理腳本問題

目錄 問題 原因&#xff1a; 經過各種對比 解決方法 問題 比如 echo "yes" | find /c /v "" 這個統計非空串的行數&#xff0c;在其它系統都是 1&#xff1b;但在win7里非正常的反應&#xff0c;為空。 原因&#xff1a; 在wvpCheckStart.bat 首…