【洛谷】單向鏈表、隊列安排、約瑟夫問題(list相關算法題)

文章目錄

  • 單向鏈表
    • 題目描述
    • 題目解析
    • 代碼
  • 隊列安排
    • 題目描述
    • 題目解析
    • 代碼
  • 約瑟夫問題
    • 題目描述
    • 題目解析
    • 代碼


單向鏈表

題目描述

在這里插入圖片描述

題目解析

這道題因為有大量的任意位置插入刪除,所以肯定不能用數組,用鏈表是最合適的,而在算法競賽通常都用靜態鏈表,所以這道題我們選用靜態單鏈表。
這道題題目規定保證任何時間表中所有數字均不相同,所以我們可以用mp輸入登記插入數據所在位置,高效率完成find操作。
三個操作每一個操作都需要先找到x的物理結構下標,所以我們先借助mp數組將x的下標存到p中,靜態鏈表的插入刪除操作小編專門出了一篇博客,感興趣的讀者可以移步:點擊此處
需要注意的是首先刪除操作時需要先將x在mp數組中刪除再erase x,如果先erase x的話,后面刪除x在mp數組的標記的操作就是刪除的x的下一個結點在mp數組的標記了。然后題目規定一開始鏈表里除了哨兵位還有一個存1的結點。

代碼

using namespace std;
#include <iostream>const int N = 1e6 + 10;  //單個數值的范圍
const int M = 1e5 + 10;  //數量范圍
int e[M], ne[M], mp[N],id, h;int main()
{id++;e[id] = 1;mp[1] = id;int q;cin >> q;int op, x, y;while (q--){cin >> op >> x;//p是x存的物理結構下標int p = mp[x];   if (op == 1){cin >> y;id++;e[id] = y;mp[y] = id;ne[id] = ne[p];ne[p] = id;}else if(op == 2){cout << e[ne[p]] << endl;}else{if (ne[p] != 0){mp[e[ne[p]]] = 0;ne[p] = ne[ne[p]];}}}return 0;
}

隊列安排

題目描述

在這里插入圖片描述

題目解析

我們先分析一下,這道題有頻繁的任意位置插入刪除,不能用順序表只能用鏈表,而且是在指定位置的前面或者后面插入刪除,那么只能用雙向鏈表。
這道題很特殊,因為它的按順序插入的,所以它的插入的順序就是數組的物理下標,也等于e[
]數組里的值,所以id就等于插入的順序j,(有就是for循環里的j的值)我們要之前要借助mp[
]才能找到的插入位置的數組下標在這道題就等于k。刪除時題目規定不能重復刪,那創建一個數組st來標記某個物理下標是否被刪除過,被刪除過就置為true,若判斷當前位置為true,直接continue跳過當次循環操作。
最后因為數組的物理下標直接等于e[ ]數組里的值,所以直接循環遍歷打印數組的物理下標。

代碼

using namespace std;
#include <iostream>const int Q = 1e5 + 10;
int ne[Q], pre[Q], h;
bool st[Q]; //用來標記x位置是否被刪除int main()
{ne[1] = h;pre[1] = h;ne[h] = 1;pre[h] = 1;int N;cin >> N;//插入int k, p;for (int j = 2; j <= N; j++){cin >> k >> p;if (p == 0){ne[j] = k;pre[j] = pre[k];ne[pre[k]] = j;pre[k] = j;}else{ne[j] = ne[k];pre[j] = k;pre[ne[k]] = j;ne[k] = j;}}//刪除  int M, x;cin >> M;while (M--){cin >> x;if (st[x] == true)continue;ne[pre[x]] = ne[x];pre[ne[x]] = pre[x];st[x] = true;}//輸出  for (int i = ne[h]; i; i = ne[i]){cout << i << " ";}return 0;
}

約瑟夫問題

題目描述

在這里插入圖片描述

題目解析

這道題思路很多,小編這里創建一個雙向循環鏈表來解決,要注意根據題意我們要用循環鏈表來模擬一個圈,所以不能帶哨兵位。
首先創建出一個n個結點的鏈表。然后從下標為0開始,每遍歷m個結點就把當前結點打印出來,然后刪除當前結點,指針再指向刪除結點的下一個結點,最后把所有結點刪除停止循環們也就是循環n次。

代碼

using namespace std;
#include <iostream>const int N = 100 + 10;
int e[N], ne[N], pre[N], id, h;int main()
{int m, n;cin >> n >> m;//初始化e[0] = 1;ne[0] = 0;pre[0] = 0;for (int i = 1; i < n; i++){e[i] = i + 1;ne[i] = 0;pre[i] = i - 1;pre[h] = i;ne[i - 1] = i;}//循環打印刪除int cur = 0;while (n--){int tmp = m;while (--tmp){cur = ne[cur];}cout << e[cur] << " ";//刪除cur所在結點ne[pre[cur]] = ne[cur];pre[ne[cur]] = pre[cur];cur = ne[cur];}return 0;
}

以上就是小編分享的全部內容了,如果覺得不錯還請留下免費的關注和收藏如果有建議歡迎通過評論區或私信留言,感謝您的大力支持。
一鍵三連好運連連哦~~

在這里插入圖片描述

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

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

相關文章

當人機交互邁向新紀元:腦機接口與AR/VR/MR的狂飆之路

從手機到 “頭盔”&#xff1a;交互終端的變革猜想??在當今數字化時代&#xff0c;智能手機無疑是我們生活中不可或缺的一部分。它集通訊、娛樂、辦公等多種功能于一身&#xff0c;成為了人們與外界交互的主要窗口。然而&#xff0c;隨著科技的飛速發展&#xff0c;智能手機作…

InfluxDB HTTP API 接口調用詳解(二)

實際應用案例演示 1. 數據寫入案例 假設在一個物聯網設備數據采集場景中&#xff0c;有多個傳感器設備持續采集環境的溫度和濕度數據。我們以 Python 語言為例&#xff0c;使用requests庫來調用 InfluxDB 的 Write 接口將數據寫入 InfluxDB。 首先&#xff0c;確保已經安裝了…

世運會線上知識競賽答題pk小程序怎么做

隨著2025年成都世界運動會的來臨&#xff0c;越來越多的企事業單位組織員工進行線上知識競賽&#xff0c;那么答題PK小程序該怎么做&#xff0c;接下來我們來一一分析&#xff1a; 世運會線上知識競賽答題pk小程序怎么做一、答題功能&#xff1a;支持多種題型&#xff0c;如選擇…

Java畢業設計 | 基于微信小程序的家校互動作業管理系統(Spring Boot+Vue.js+uni-app+AI,附源碼+文檔)

Java畢業設計 | 基于微信小程序的家校互動作業管理系統&#xff08;Spring BootVue.jsuni-app&#xff0c;附源碼文檔&#xff09;&#x1f3af; 畢業設計私人教練 專注計算機畢設輔導第 6 年&#xff0c;累計 1v1 帶飛 800 同學順利通關。從選題、開題、代碼、論文到答辯&…

CentOS8 使用 Docker 搭建 Jellyfin 家庭影音服務器

CentOS8 使用 Docker 搭建 Jellyfin 家庭影音服務器 一、前言 由于 Jellyfin 的 GPL 協議和 Intel 的 media-driver (iHD) Linux 驅動&#xff08;部分開源&#xff09;在協議上不兼容的緣故&#xff0c;Jellyfin 官方的 Docker 鏡像&#xff1a;jellyfin/jellyfin 并不包含 …

PyTorch武俠演義 第一卷:初入江湖 第4章:損失玉佩的評分風波

第一卷&#xff1a;初入江湖 第4章&#xff1a;損失玉佩的評分風波比武開幕 晨鐘響徹山谷&#xff0c;PyTorch派三年一度的"模型比武大會"正式開始。各分舵弟子列隊入場&#xff0c;林小碼跟在Tensor大師身后&#xff0c;眼睛瞪得溜圓——只見&#xff1a; "卷積…

HttpServletRequestWrapper存儲Request

HTTP請求的輸入流只能被讀取一次&#xff0c;再想獲取就獲取不到了&#xff0c;那有什么方法可以緩存呢&#xff0c;我們可以自定義一個HttpServletRequest&#xff0c;或者是想在請求參數中統一添加或刪除參數也可以使用此類進行改造&#xff0c;然后通過過濾器繼續向下流轉。…

算法:數組part02: 209. 長度最小的子數組 + 59.螺旋矩陣II + 代碼隨想錄補充58.區間和 + 44. 開發商購買土地

算法&#xff1a;數組part02: 209. 長度最小的子數組 59.螺旋矩陣II 代碼隨想錄補充58.區間和 44. 開發商購買土地 209. 長度最小的子數組題目&#xff1a;https://leetcode.cn/problems/minimum-size-subarray-sum/description/ 文章講解&#xff1a;https://programmercarl…

Spring 核心知識點梳理 1

目錄 Spring Spring是什么&#xff1f; Spring中重要的模塊 Spring中最重要的就是IOC(控制反轉)和AOP(面向切面編程) 什么是IOC DI和IOC之間的區別 為什么要使用IOC呢&#xff1f; IOC的實現機制 什么是AOP Aop的核心概念 AOP的環繞方式 AOP發生的時期 AOP和OOP的…

Kafka運維實戰 07 - kafka 三節點集群部署(混合模式)(KRaft 版本3.7.0)

目錄環境準備主機準備補充說明JDK安裝 (三臺主機分別執行)下載jdkjdk安裝kafka 部署(三臺主機分別執行)kafka 下載kafka 版本號結構解析kafka 安裝下載和解壓安裝包(3臺主機都執行)配置 server.properties &#xff08;KRaft 模式&#xff09;192.168.37.10192.168.37.11192.16…

linux內核與GNU之間的聯系和區別

要理解操作系統&#xff08;如 GNU/Linux&#xff09;的組成&#xff0c;需要明確 內核&#xff08;Kernel&#xff09; 和 GNU 工具鏈 各自的功能&#xff0c;以及它們如何協作構成完整的操作系統。以下是詳細分析&#xff1a;1. 內核&#xff08;Kernel&#xff09;的功能 內…

文件包含學習總結

目錄 漏洞簡介 漏洞原理 漏洞分類 漏洞防御 漏洞簡介 程序開發人員一般會把重復使用的函數寫到單個文件中&#xff0c;需要使用某個函數時直接調用此文件&#xff0c;而無需再次編寫&#xff0c;這種文件調用的過程一般被稱為文件包含。程序開發人員一般希望代碼更靈活&…

TQZC706開發板教程:創建PCIE項目

本例程基于zc706開發板&#xff0c;使用xdma核創建PCIE項目&#xff0c;最終實現插入主機可識別出Xilinx設備。在vivado中創建一個空的706項目。創建完成后添加IP核-->搜索xdma-->雙擊打開配置。添加XDMA核如下所示basic配置peic id中設置設備號等信息&#xff0c;這里保…

科技賦能景區生.態,負氧離子氣象監測站筑牢清新防線

負氧離子氣象監測站&#xff0c;如同景區空氣質量的堅固防線&#xff0c;默默守護著每一寸土地的清新。?它以精準的監測能力為防線基石。借助 “吸入式電容收集法”&#xff0c;能敏銳捕捉空氣中負氧離子的蹤跡&#xff0c;精準測量其濃度&#xff0c;同時將溫度、濕度、PM2.5…

AMD官網下載失敗,不讓賬戶登錄下載

別使用163郵箱 使用QQ郵箱&#xff0c;然后用GPT生成一個外國&#xff0c;比如日本的地區信息填上去就可以下載了

Elasticsearch-8.17.0 centos7安裝

下載鏈接 https://www.elastic.co/downloads/past-releases/elasticsearch-8-17-0 https://www.elastic.co/downloads/past-releases/logstash-8-17-0 https://www.elastic.co/cn/downloads/past-releases/kibana-8-17-0https://artifacts.elastic.co/downloads/elasticsearch/…

windows下SAS9.4軟件下載與安裝教程

SAS 9.4是SAS公司推出的一款功能強大的統計分析軟件&#xff0c;廣泛應用于數據分析、商業智能、預測分析、數據挖掘及統計建模等多個領域。數據處理與管理能力&#xff1a;SAS 9.4支持多種數據格式的導入導出&#xff0c;包括JSON、XML等&#xff0c;便于處理來自Web和API的數…

MyBatis-Plus極速開發指南

MyBatis-Plus簡介MyBatis-Plus 是一個 MyBatis 的增強工具&#xff0c;在 MyBatis 的基礎上只做增強不做改變&#xff0c;簡化開發&#xff0c;提高效率。它提供了以下主要特性&#xff1a;無侵入&#xff1a;只做增強不做改變&#xff0c;引入它不會對現有工程產生影響強大的 …

Django接口自動化平臺實現(五)

8. 測試用例執行 預期效果如下&#xff1a;用例執行邏輯如下&#xff1a;前端提交用例 id 列表到后臺&#xff0c;后臺獲取每一條用例的信息&#xff1b;后臺獲取域名信息、用例 id 列表&#xff1b;對用例的請求數據進行變量的參數化、函數化等預處理操作&#xff1b;根據先后…

一個沒有手動加分號引發的bug

最近因為分號的疏忽&#xff0c;導致出現了一個bug&#xff0c;記錄下來&#xff0c;分享給大家。 1、一個示例 給你下面這一段代碼&#xff0c;你根據經驗判斷一下運營結果 let [a,b] [a,b] let [x,y] [1,2] if(x < y){[x,y] [y,x][a,b] [b,a] }按照一般的理解&#xf…