(洛谷)P4447 [AHOI2018初中組] 分組

題目描述

小可可的學校信息組總共有?n?個隊員,每個人都有一個實力值?ai?。現在,一年一度的編程大賽就要到了,小可可的學校獲得了若干個參賽名額,教練決定把學校信息組的?n?個隊員分成若干個小組去參加這場比賽。

但是每個隊員都不會愿意與實力跟自己過于懸殊的隊員組隊,于是要求分成的每個小組的隊員實力值連續,同時,一個隊不需要兩個實力相同的選手。舉個例子:[1,2,3,4,5]?是合法的分組方案,因為實力值連續;[1,2,3,5]?不是合法的分組方案,因為實力值不連續;[0,1,1,2]?同樣不是合法的分組方案,因為出現了兩個實力值為?1?的選手。

如果有小組內人數太少,就會因為時間不夠而無法獲得高分,于是小可可想讓你給出一個合法的分組方案,滿足所有人都恰好分到一個小組,使得人數最少的組人數最多,輸出人數最少的組人數的最大值。

注意:實力值可能是負數,分組的數量沒有限制。

輸入格式

輸入有兩行:

第一行一個正整數?n,表示隊員數量。

第二行有?n?個整數,第?i?個整數?ai??表示第?i?個隊員的實力。

輸出格式

輸出一行,包括一個正整數,表示人數最少的組的人數最大值。

輸入輸出樣例

輸入 #1復制

7
4 5 2 3 -4 -3 -5

輸出 #1復制

3

說明/提示

樣例解釋

分為?2?組,一組的隊員實力值是?[4,5,2,3],一組是?[?4,?3,?5],其中最小的組人數為?3,可以發現沒有比?3?更優的分法了。

數據范圍

對于?100%?的數據滿足:1≤n≤105,∣ai?∣≤109。

本題共?10?個測試點,編號為?1~10,每個測試點額外保證如下:

測試點編號數據限制
1~2n≤6,1≤ai?≤100
3~4n≤1000,1≤ai?≤105?且?ai??互不相同
5~6n≤105,ai??互不相同
7~8n≤105,1≤ai?≤105
9~10n≤105,?109≤ai?≤109

思路:需要得到最后的分組策略中,含最小人數的要在所有分組策略中最多。那么意味著,如果我現在有多個分組的人具備x的實力值的人,此時來了一個x+1實力值的人,因為要最大化最少人數的拿個分組的人數,那么我們的貪心策略就是:要將此時這個x+1實力值的人放到當前人數最小的組中。

實現:由于每個組中的人的實力值需要連續且不重復,所以我們考慮對實力值進行排序。因為在來了一個新的數時,每個組都要被考慮是否放進去,判斷條件:當前組中的最后一個數是否比當前數少一,在這個基礎上,找出人數最少的那個組。所以我們需要維護每個組的狀態,但是我們又不需要維護每個數,由于一開始對數組進行了排序,所以我們只需要維護每個組的最后一個數。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;typedef struct Group{int x,y;bool operator<(Group g) const{return x<g.x;}	
}G;int main(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int n;cin>>n;int nums[n];for(int i=0; i<n; i++) cin>>nums[i];sort(nums,nums+n);int q[n],qLen[n];int qnums = 0;for(int i=0; i<n; i++){int now = nums[i];int minLen = INT_MAX;int InsertIndex = -1; 		for(int j=0; j<qnums; j++){if(q[j]+1==now&&minLen>qLen[j]){minLen = qLen[j];InsertIndex = j;	}	}if(InsertIndex==-1){q[qnums] = now;qLen[qnums] = 1;qnums++;}else{q[InsertIndex]=now;qLen[InsertIndex]++;}}int minn = INT_MAX;for(int i=0; i<qnums; i++){minn = min(minn, qLen[i]);}cout<<minn<<endl;return 0;
}

但是,這樣并不會通過所有的測試樣例!!!!最后一個點會超時,我們考慮進行優化

可以發現我們每次都要找人數最少的那個組,那我們能不能搜索的再快一點呢?可以,直接使用二分搜索。

我們每次在找組的時候,都將此時這個數放到最右邊的那個地方,這樣我們就可以一直保證人數最少的會被變大。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;typedef struct Group{int x,y;bool operator<(Group g) const{return x<g.x;}	
}G;int bineray(int x,int l,int r,int *q){while(l<=r){int mid = l+(r-l)/2;if(q[mid]<=x) l=mid+1;else r=mid-1;}return q[l-1]==x?l-1:-1;
}int main(){ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int n;cin>>n;int nums[n];for(int i=0; i<n; i++) cin>>nums[i];sort(nums,nums+n);int q[n],qLen[n];int qnums = 0;for(int i=0; i<n; i++){int now = nums[i];int InsertIndex = bineray(now-1,0,qnums-1,q);if(InsertIndex==-1){q[qnums] = now;qLen[qnums] = 1;qnums++;}else{q[InsertIndex]=now;qLen[InsertIndex]++;}}int minn = INT_MAX;for(int i=0; i<qnums; i++){minn = min(minn, qLen[i]);}cout<<minn<<endl;return 0;
}

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

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

相關文章

PLA/PHA生物降解化妝品包裝材料的穩定性與貨架期契合性研究

更多案例&#xff1a;https://npmatc.niicapm.com/ 在可持續發展理念的推動下&#xff0c;化妝品行業正經歷一場綠色變革。環保聚合物在包裝領域的應用已成為重要趨勢&#xff0c;這不僅源于消費者對生態友好產品的需求&#xff0c;更基于全球塑料污染治理的緊迫性。化妝品包裝…

STM32[筆記]--4.嵌入式硬件基礎

4.嵌入式硬件基礎 4.1認識上官二號開發板 主控芯片:STM32F103C8T6高速晶振:8M低速晶振:32.768kLED:5顆KEY:3個 主控芯片內部的資源如下項目介紹內核Cortex-M3Flsah64K*8bitSRAM20K*8bitGPIO37個GPIO,分別為PA0-PB15,PC13-PC15,PD0-PD1ADC2個12bitADC合計12了通道,外部通…

【LLaMA-Factory 實戰系列】一、數據準備篇 - 從文本到多模態的完整流程

【LLaMA-Factory 實戰系列】一、數據準備篇 - 從文本到多模態的完整流程 1. 引言2. LLaMA-Factory 數據格式概述2.1 Alpaca 格式2.2 ShareGPT 格式 3. 文本數據準備3.1 Alpaca 格式示例3.2 ShareGPT 格式示例3.3 預訓練數據格式 4. 多模態數據準備4.1 圖像數據準備4.2 視頻數據…

JuiceFS 集群部署詳細指南:使用 SeaweedFS 作為數據存儲,ETCD 作為元數據存儲

1. 概述 本指南將詳細介紹如何部署一個 JuiceFS 集群,其中數據存儲層采用高性能的分布式對象存儲 SeaweedFS,元數據存儲層采用強一致性的分布式鍵值存儲 ETCD。這種組合方案旨在為用戶提供一個高性能、高可用、易于擴展且數據強一致的分布式文件系統解決方案,特別適用于云原…

【數字后端】- 什么是NDR規則?

NDR是指與工藝庫的默認規則&#xff08;DR&#xff09;不同的特殊物理規則&#xff1a; 常見的有&#xff1a; 間距規則&#xff08;spacing&#xff09;&#xff1a;增加信號線與鄰近線之間的距離&#xff0c;降低Crosstalk串擾。線寬規則&#xff08;width&#xff09;&…

B2B 商城定制的優勢:解鎖企業數字化轉型新動力

精準適配業務流程&#xff0c;貼合企業運營特色? 每一家企業都有獨特的業務流程、運營模式與管理需求。標準化的 B2B 商城往往難以完全滿足企業個性化的業務需求&#xff0c;而定制化商城則能夠深入剖析企業業務細節&#xff0c;從采購、銷售、庫存管理到財務管理等全流程&am…

osg實例繪制

#include <osg/Geometry> #include <osg/Geode> #include <osg/Program> #include <osg/VertexAttribDivisor> #include <osgViewer/Viewer> #include <osgViewer/ViewerEventHandlers> #include <random> // 創建單個立方體幾何體&…

Qt面試題匯總

目錄 1. 簡單說一下Qt 2. 用過QT中的哪些模塊&#xff1f; 3. 說一些你常用的Qt控件&#xff1f; 4. Qt中如何創建一個窗口&#xff1f; 5. 說一下QT中創建控件的方式? 6. 說一下Qt中信號和槽機制是什么&#xff1f; 7. 說一下QT信號與槽機制原理&#xff1f; 8. 如何自…

【stm32】標準庫學習——USART串口

目錄 一、USART串口 1.串口參數及時序 2.USART簡介 3.配置USART基本結構 4.初始化模板 (1) 接收一個數據 (2) 發送一個數據 一、USART串口 1.串口參數及時序 波特率:串口通信的速率起始位:標志一個數據幀的開始&#xff0c;固定為低電平數據位:數據幀的有效載荷&#…

黑馬Day01-03集開始

03集 JSX jsx里面可以寫 表達式,表達式里面會返回一個值js語法的擴展,需要babel解析才能夠在瀏覽器運行 語法 使用花括號 {} ,在里面進行編寫jsx代碼04集 高頻場景 使用引號傳遞字符串 使用js變量 函數調用和方法調用 使用js對象.js自帶的一些對象或new出來的對象{&quo…

vue 路由學習

params 不能傳遞對象類型如 [ ]和{ } query傳參 總結&#xff1a; query傳參既可以通過name 和path 找到路由規則里的組件&#xff0c;所以為了統一避免非必要麻煩 無論是使用query傳參還是 params傳參 映射路由建議統一使用 name 進階 props的使用 備注&#xff1a;資料來自…

JDK安裝全攻略:開啟Java編程大門

目錄 一、安裝前準備1.1 確認系統類型1.2 檢查系統要求1.3 下載 JDK 安裝包 二、Windows 系統下 JDK 安裝步驟2.1 雙擊安裝包2.2 選擇安裝目錄2.3 完成安裝 三、Windows 系統環境變量配置3.1 打開環境變量設置3.2 配置 JAVA_HOME 變量3.3 配置 Path 變量3.4 驗證配置 四、Linux…

《P1253 扶蘇的問題》

題目描述 給定一個長度為 n 的序列 a&#xff0c;要求支持如下三個操作&#xff1a; 給定區間 [l,r]&#xff0c;將區間內每個數都修改為 x。給定區間 [l,r]&#xff0c;將區間內每個數都加上 x。給定區間 [l,r]&#xff0c;求區間內的最大值。 輸入格式 第一行是兩個整數&…

09.【C語言學習筆記】指針(一)

目錄 1. 內存和地址 1.1 內存 1.2 究竟該如何理解編址 2. 指針變量和地址 2.1 取地址操作符&#xff08;&&#xff09; 2.2 指針變量和解引用操作符&#xff08;*&#xff09; 2.2.1 指針變量 2.2.2 如何拆解指針類型 2.2.3 解引用操作符 * 2.3 指針變量的大小…

Java中static關鍵字的作用與使用詳解

static是Java中一個非常重要的關鍵字&#xff0c;它可以用來修飾變量、方法、代碼塊和嵌套類。下面將從多個方面詳細解釋static的作用和使用方法。 一、static變量&#xff08;類變量&#xff09; 作用 static變量屬于類&#xff0c;而不是類的某個實例。所有實例共享同一個s…

HMLDM-UD100A 型工業激光測距儀通過modbusRTU 轉 profinet 網關輕松接入到西門子1200plc

HMLDM-UD100A 型工業激光測距儀通過modbusRTU 轉 profinet 網關輕松接入到西門子1200plc 在現代工業生產與自動化控制領域&#xff0c;精準的測量設備與高效的通信技術至關重要。HMLDM-UD100A 型工業激光測距儀憑借其高精度、穩定性強等優勢&#xff0c;廣泛應用于各類工業場景…

數據結構與算法:圖論——深度優先搜索dfs

深度優先搜索dfs 提到深度優先搜索&#xff08;dfs&#xff09;&#xff0c;就不得不說和廣度優先搜索&#xff08;bfs&#xff09;有什么區別 根據搜索方式的不同&#xff0c;可以將圖的遍歷分為「深度優先搜索」和「廣度優先搜索」。 深度優先搜索&#xff1a;從某一頂點出…

數組題解——?合并區間【LeetCode】

56. 合并區間 排序&#xff1a; 將所有區間按起始位置 start 從小到大排序。這樣&#xff0c;重疊的區間會相鄰排列&#xff0c;方便后續合并。 合并&#xff1a; 初始化一個空列表 merged&#xff0c;用于存儲合并后的區間。遍歷排序后的區間列表&#xff1a; 如果 merged 為…

關于高精度和鏈表的詳細講解(從屬于GESP五級)

本章內容 高精度 鏈表 位數再多&#xff0c;只管穩穩進位&#xff0c;終會把答案寫滿。 一、高精度 1. 什么是高精度 ? 定義 “高精度整數”指不受 C 原生整型 (int / long long) 位寬限制&#xff0c;而用數組模擬任意位數的大整數。 ? 必要性 64 位 long long 僅能…

Python自動化框架選型指南:Selenium/Airflow/Celery該選誰?

在Python自動化領域,Selenium、Airflow和Celery是三個高頻出現的工具,但它們的定位和適用場景截然不同。許多開發者在技術選型時容易混淆它們的邊界,導致項目架構臃腫或功能不匹配。本文將通過對比分析,幫你明確不同場景下的最佳選擇。 一、框架定位與核心功能對比 框架核…