藍橋杯2023年第十四屆省賽真題-整數刪除 暴力-->鏈表+小根堆

題目來自DOTCPP:

思路:

①每次找到數列中的最小值下標,然后用狀態數組st標記它,相當與刪除它,之后就不會訪問它。

②對最小值下標左邊和右邊判斷一下,看有沒有數字,如果有就把最小值加到兩邊第一個數字。

暴力代碼如下(會超時):

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 5e5+10;int n, k;
int arr[N];
bool st[N];//記錄一個數字有沒有選過signed main(){cin >> n >> k;for(int i = 1; i <= n; i++) cin >> arr[i];for(int i = 1; i <= k ; i++){//找到最小值在數組中的位置int minv = 1e18;int ssmin = -1;for(int j = 1; j <= n; j++){if(minv > arr[j] && !st[j]){//更新最小值的坐標ssmin = j;minv = arr[j];}}//將最小值標記st[ssmin] = true;//將最小值加到右邊第一個數字if(ssmin > 1 ){for(int m = ssmin; m >= 1; m--){if(!st[m]){arr[m] += minv;break;}}}//將最小值加到左邊第一個數字if(ssmin < n){for(int k = ssmin; k<= n; k++){if(!st[k]){arr[k] += minv;break;}}}}for(int i =1; i <= n; i++){if(st[i]) continue;cout << arr[i] << " ";}return 0;
}

代碼優化:

上面代碼K次排序,在N個數中找到最小值。時間復雜度爆炸,我們需要對它優化。需要用到小根堆來記錄最小值的下標,同時對于最小值的下標兩邊,我們用鏈表記錄,會減少很多時間。

小根堆+鏈表:

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 5e5+20;#define x first
#define y second
typedef pair<int, int> PII;int n, k;
int arr[N];//數據
//優先隊列-小根堆
//q第一個參數為值,第二個參數為這個值的下標
priority_queue<PII, vector<PII>, greater<PII>> q;
//鏈表
int l[N], r[N];signed main(){cin >> n >> k;for(int i = 1; i <= n; i++){cin >> arr[i];//存入優先隊列q.push({arr[i],i});//記錄左右兩邊坐標 最左邊和最右邊都記為-1l[i] = i-1;r[i] = i+1;//最右邊記為-1if(r[i] == n+1){r[i] = -1;}}//開始K次操作while(k--){//取出最小值auto t = q.top();//刪除最小值q.pop();//最小值的 值、坐標int num = t.x, pos = t.y;//后面pos兩邊第一個數加上num后,q中的值發生改變//我們沒有記錄 因此我們要判斷一下if(num != arr[pos]){//我們之前刪除了這個數,然后在更新一下//因為我們取得值不是更新過的值(這個值是原來的,沒有加上最小值)q.push({arr[pos], pos});k++;//**同時這次操作要重新來過 k++continue;}//對刪除的數標記一下,方便輸出arr[pos] = -1;//對左右兩邊第一個數加上最小值//對刪除最小值下標的鏈表更新,即pos左邊和右邊鏈接在一起if(l[pos] >= 1){//左邊數加上最小值arr[l[pos]] += num;//pos左邊鏈接到pos右邊r[l[pos]] = r[pos];}if(r[pos] >= 1){//右邊數加上最小值arr[r[pos]] += num;//pos右邊鏈接到pos右邊l[r[pos]] = l[pos];}} for(int i = 1; i <= n; i++){if(arr[i] != -1){cout << arr[i] << " ";}}return 0;
}

注意:代碼中pos左右兩邊的數的下標,在arr數組中加上最小值之后,在q中是沒有更新的,因此我們要判斷一下,q中取出最小值的下標和我們在arr數組中相同下標的元素的值是否相等,不相等的話,就要更新一下。同時,這次操作沒有對pos兩邊的元素進行操作,則k++。

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

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

相關文章

springboot438-基于SpringBoot的數字化教學資源管理系統(源碼+數據庫+純前后端分離+部署講解等)

&#x1f495;&#x1f495;作者&#xff1a; 愛笑學姐 &#x1f495;&#x1f495;個人簡介&#xff1a;十年Java&#xff0c;Python美女程序員一枚&#xff0c;精通計算機專業前后端各類框架。 &#x1f495;&#x1f495;各類成品Java畢設 。javaweb&#xff0c;ssm&#xf…

藍橋杯刷題——第十五屆藍橋杯大賽軟件賽省賽C/C++ 大學 B 組

一、0握手問題 - 藍橋云課 算法代碼&#xff1a; #include <iostream> using namespace std; int main() {int sum0;for(int i49;i>7;i--)sumi;cout<<sum<<endl;return 0; } 直接暴力&#xff0c;題意很清晰&#xff0c;累加即可。 二、0小球反彈 - 藍…

跨境衛士跟vps哪個更好用?跨境衛士為賣家提供固定IP環境

跨境衛士是通過為賣家提供固定的環境 i p來隔離本地電腦環境&#xff0c;為賣家創造一個真實獨立的物理環境&#xff0c;讓買家再任意電腦&#xff0c;任意網絡下都能夠安全的管理賬號。跨境衛士和紫鳥原理一樣&#xff0c;是通過為賣家提供固定的環境 i p來隔離本地電腦環境&a…

coding ability 展開第四幕(滑動指針——鞏固篇)超詳細!!!!

文章目錄 前言水果成籃思路 找到字符串中所有字母異位詞思路 串聯所有單詞的子串思路 最小覆蓋子串思路 總結 前言 本專欄上一篇博客&#xff0c;帶著大家從認識滑動窗口到慢慢熟悉 相信大家對滑動窗口已經有了大概的認識 其實主要就是抓住——一段連續的區間 今天來學習一些滑…

圖解AUTOSAR_CP_BSW_General

AUTOSAR BSW通用規范詳解 AUTOSAR基礎軟件模塊通用規范與架構解析 目錄 1. 概述 1.1. AUTOSAR BSW通用規范簡介1.2. 文檔目的與范圍2. BSW模塊文件結構 2.1. 標準文件組織2.2. 命名規范3. BSW模塊接口 3.1. 接口類型3.2. 模塊API3.3. 配置參數4. BSW通用架構 4.1. 分層架構4.2.…

如何在Futter開發中做性能優化?

目錄 1. 避免不必要的Widget重建 問題&#xff1a;頻繁調用setState()導致整個Widget樹重建。 優化策略&#xff1a; 2. 高效處理長列表 問題&#xff1a;ListView一次性加載所有子項導致內存暴漲。 優化策略&#xff1a; 3. 圖片加載優化 問題&#xff1a;加載高分辨率…

組件通信框架ARouter原理剖析

組件通信框架ARouter原理剖析 一、前言 隨著Android應用規模的不斷擴大&#xff0c;模塊化和組件化開發變得越來越重要。ARouter作為一個用于幫助Android應用進行組件化改造的框架&#xff0c;提供了一套完整的路由解決方案。本文將深入分析ARouter的核心原理和實現機制。 二…

Netty啟動源碼NioEventLoop剖析accept剖析read剖析write剖析

學習鏈接 NIO&Netty - 專欄 Netty核心技術十–Netty 核心源碼剖析Netty核心技術九–TCP 粘包和拆包及解決方案Netty核心技術七–Google ProtobufNetty核心技術六–Netty核心模塊組件Netty核心技術五–Netty高性能架構設計 聊聊Netty那些事兒 - 專欄 一文搞懂Netty發送數…

2024年12月CCF-GESP編程能力等級認證C++編程一級真題解析

一級真題的難度: ? CCF-GESP編程能力等級認證C++編程一級真題的難度適中?。這些真題主要考察的是C++編程的基礎知識、基本語法以及簡單的算法邏輯。從搜索結果中可以看到,真題內容包括了選擇題、編程題等題型,涉及的內容如C++表達式的計算、基本輸入輸出語句的理解…

73.HarmonyOS NEXT PicturePreviewImage組件深度剖析:高級功能擴展與性能優化策略(三)

溫馨提示&#xff1a;本篇博客的詳細代碼已發布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下載運行哦&#xff01; HarmonyOS NEXT PicturePreviewImage組件深度剖析&#xff1a;高級功能擴展與性能優化策略(三) 文章目錄 HarmonyOS NEXT PicturePreviewImage組件…

Spark 中創建 DataFrame 的2種方式對比

spark.createDataFrame(data).toDF("name", "age") 和 spark.createDataFrame(spark.sparkContext.parallelize(data), schema) 創建df的方式有什么區別&#xff1f; 在 Spark 中&#xff0c;創建 DataFrame 的方式有多種&#xff0c;其中兩種常見的方式…

六十天前端強化訓練之第十七天React Hooks 入門:useState 深度解析

歡迎來到編程星辰海的博客講解 看完可以給一個免費的三連嗎&#xff0c;謝謝大佬&#xff01; 目錄 一、知識講解 1. Hooks 是什么&#xff1f; 2. useState 的作用 3. 基本語法解析 4. 工作原理 5. 參數詳解 a) 初始值設置方式 b) 更新函數特性 6. 注意事項 7. 類組…

IEC61850標準下MMS 緩存報告控制塊 ResvTms詳細解析

IEC61850標準是電力系統自動化領域唯一的全球通用標準。IEC61850通過標準的實現&#xff0c;使得智能變電站的工程實施變得規范、統一和透明&#xff0c;這大大提高了變電站自動化系統的技術水平和安全穩定運行水平。 在 IEC61850 標準體系中&#xff0c;ResvTms&#xff08;r…

【JVM】GC 常見問題

GC 常見問題 哪些情況新生代會進入老年代 新生代 GC 后幸存區&#xff08;survivor&#xff09;不夠存放存活下來的對象&#xff0c;會通過內存擔保機制晉升到老年代。大對象直接進入老年代&#xff0c;因為大對象再新生代之間來會復制會影響 GC 性能。由 -XX:PretenureSizeT…

Audacity 技術淺析(一)

Audacity 是一個開源的音頻編輯工具&#xff0c;雖然它主要用于音頻編輯和處理&#xff0c;但也可以通過一些插件和功能實現基本的音頻生成功能。 1. Audacity 的音頻生成基礎 Audacity 的音頻生成主要依賴于其內置的生成器、效果器以及 Nyquist 編程語言。這些工具允許用戶創…

G-Star 公益行起航,揮動開源技術點亮公益!

公益組織&#xff0c;一直是社會溫暖的傳遞者&#xff0c;但在數字化浪潮中&#xff0c;也面臨著諸多比大眾想象中復雜的挑戰&#xff1a;項目管理如何更高效&#xff1f;志愿者管理又該如何創新&#xff1f;宣傳推廣怎么才能更有影響力&#xff1f;內部管理和技術支持又該如何…

MongoDB 數據導出與導入實戰指南(附完整命令)

1. 場景說明 在 MongoDB 運維中&#xff0c;數據備份與恢復是核心操作。本文使用 mongodump 和 mongorestore 工具&#xff0c;演示如何通過命令行導出和導入數據&#xff0c;解決副本集連接、路徑指定等關鍵問題。 2. 數據導出&#xff08;mongodump&#xff09; 2.1 導出命…

京東 h5st 5.1 分析

聲明: 本文章中所有內容僅供學習交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包內容、敏感網址、數據接口等均已做脫敏處理&#xff0c;嚴禁用于商業用途和非法用途&#xff0c;否則由此產生的一切后果均與作者無關&#xff01; 逆向分析 學習了2天某物&#xff0c;f…

CentOS 系統安裝 docker 以及常用插件

博主用的的是WindTerm軟件鏈接的服務器&#xff0c;因為好用 1.鏈接上服務器登入后&#xff0c;在/root/目錄下 2.執行以下命令安裝docker sudo yum install -y yum-utilssudo yum-config-manager \--add-repo \https://download.docker.com/linux/centos/docker-ce.reposudo…

不像人做的題————十四屆藍橋杯省賽真題解析(上)A,B,C,D題解析

題目A&#xff1a;日期統計 思路分析&#xff1a; 本題的題目比較繁瑣&#xff0c;我們采用暴力加DFS剪枝的方式去做&#xff0c;我們在DFS中按照8位日期的每一個位的要求進行初步剪枝找出所有的八位子串&#xff0c;但是還是會存在19月的情況&#xff0c;為此還需要在CHECK函數…