【PTA數據結構 | C語言版】車廂重排

本專欄持續輸出數據結構題目集,歡迎訂閱。

文章目錄

    • 題目
    • 代碼

題目

一列掛有 n 節車廂(編號從 1 到 n)的貨運列車途徑 n 個車站,計劃在行車途中將各節車廂停放在不同的車站。假設 n 個車站的編號從 1 到 n,貨運列車按照從第 n 站到第 1 站的順序經過這些車站,且將與車站編號相同的車廂卸下。

貨運列車的各節車廂以隨機順序入軌,為方便列車在各個車站卸掉相應的車廂,須重排這些車廂,使得各車廂從前往后依次編號為 1 到 n,這樣在每個車站只需卸掉當前最后一節車廂即可。

車廂重排可通過轉軌站完成。一個轉軌站包含一個入軌,一個出軌和 k 個位于入軌和出軌之間的緩沖軌。緩沖軌用于存儲尚未確定輸出次序的車廂。重排車廂的規則包含如下三條:

1.一個車廂從入軌移至出軌或緩沖軌;
2.一個車廂只有在其編號恰是下一個待輸出編號時,可移到出軌;
3.一個車廂移到某個緩沖軌,僅當其編號大于該緩沖軌中隊尾車廂的編號,若多個緩沖軌滿足這一條件,則選擇隊尾車廂編號最大的,否則選擇一個空緩沖軌,若無空緩沖軌則無法重排。

請你編寫程序實現這個重排算法。

輸入格式:
輸入在第一行中給出兩個正整數 n 和 k,均不超過 100,分別為車廂數量和緩沖軌數量。第二行按入軌順序給出 n 節車廂的編號,數字間以空格分隔。

輸出格式:
按照車廂進入出軌的順序,輸出每節車廂在入軌時的位序(從 0 開始),每個數字占一行。若無法重排,則在一行中輸出信息 錯誤:任務不可能完成。。

輸入樣例 1:
9 3
5 8 1 7 4 2 9 6 3

輸出樣例 1:
2
5
8
4
0
7
3
1
6

輸入樣例 2:
9 2
5 8 1 7 4 2 9 6 3

輸出樣例 2:
錯誤:任務不可能完成。

代碼

#include <stdio.h>
#include <stdlib.h>#define MAX_N 1000
#define MAX_K 100typedef struct {int data[MAX_N];int front;int rear;
} Deque;void dequeInit(Deque *dq) {dq->front = 0;dq->rear = 0;
}int dequeIsEmpty(Deque *dq) {return dq->front == dq->rear;
}void dequePushBack(Deque *dq, int value) {dq->data[dq->rear++] = value;
}int dequePopFront(Deque *dq) {return dq->data[dq->front++];
}int dequePeekFront(Deque *dq) {return dq->data[dq->front];
}int dequePeekBack(Deque *dq) {return dq->data[dq->rear - 1];
}int main() {int n, k;scanf("%d %d", &n, &k);Deque inTrain;dequeInit(&inTrain);int input[MAX_N];for (int i = 0; i < n; i++) {scanf("%d", &input[i]);dequePushBack(&inTrain, input[i]);}Deque bufferTrain[MAX_K];for (int i = 0; i < k; i++) {dequeInit(&bufferTrain[i]);}int curOut = 1;int num = 0;int outTrain[MAX_N];int outIdx = 0;while (num < n) {int cur = 0;if (!dequeIsEmpty(&inTrain)) {cur = dequePeekFront(&inTrain);}if (cur == curOut) {dequePopFront(&inTrain);for (int i = 0; i < n; i++) {if (input[i] == cur) {outTrain[outIdx++] = i;break;}}curOut++;num++;} else {int cnt = 0;for (int i = 0; i < k; i++) {if (!dequeIsEmpty(&bufferTrain[i])) {int head = dequePeekFront(&bufferTrain[i]);if (head == curOut) {cnt = 1;dequePopFront(&bufferTrain[i]);for (int j = 0; j < n; j++) {if (input[j] == head) {outTrain[outIdx++] = j;break;}}curOut++;num++;break;}}}if (cnt == 0) {int max = 0;for (int i = 0; i < k; i++) {if (!dequeIsEmpty(&bufferTrain[i])) {int tail = dequePeekBack(&bufferTrain[i]);if (cur > tail && tail > max) {max = tail;cnt = i;}}}if (max == 0) {for (int i = 0; i < k; i++) {if (dequeIsEmpty(&bufferTrain[i])) {dequePushBack(&bufferTrain[i], cur);dequePopFront(&inTrain);cnt = 1;break;}}if (cnt == 0) {printf("錯誤:任務不可能完成。\n");return 0;}} else {dequePushBack(&bufferTrain[cnt], cur);dequePopFront(&inTrain);}}}}if (num == n) {for (int i = 0; i < n; i++) {printf("%d\n", outTrain[i]);}}return 0;
}

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

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

相關文章

量子計算能為我們做什么?

科技公司正斥資數十億美元投入量子計算領域&#xff0c;盡管這項技術距離實際應用還有數年時間。那么&#xff0c;未來的量子計算機將用于哪些方面&#xff1f;為何眾多專家堅信它們會帶來顛覆性變革&#xff1f; 自 20 世紀 80 年代起&#xff0c;打造一臺利用量子力學獨特性質…

BKD 樹(Block KD-Tree)Lucene

BKD 樹&#xff08;Block KD-Tree&#xff09;是 Lucene 用來存儲和快速查詢 **多維數值型數據** 的一種磁盤友好型數據結構&#xff0c;可以把它想成&#xff1a;> **“把 KD-Tree 分塊壓縮后落到磁盤上&#xff0c;既能做磁盤順序讀&#xff0c;又能像內存 KD-Tree 一樣做…

【Mysql作業】

第一次作業要求1.首先打開Windows PowerShell2.連接到MYSQL服務器3.執行以下SQL語句&#xff1a;-- 創建數據庫 CREATE DATABASE mydb6_product;-- 使用數據庫 USE mydb6_product;-- 創建employees表 CREATE TABLE employees (id INT PRIMARY KEY,name VARCHAR(50) NOT NULL,ag…

(C++)STL:list認識與使用全解析

本篇基于https://cplusplus.com/reference/list/list/講解 認識 list是一個帶頭結點的雙向循環鏈表翻譯總結&#xff1a; 序列容器&#xff1a;list是一種序列容器&#xff0c;允許在序列的任何位置進行常數時間的插入和刪除操作。雙向迭代&#xff1a;list支持雙向迭代&#x…

Bash函數詳解

目錄**1. 基礎函數****2. 參數處理函數****3. 文件操作函數****4. 日志與錯誤處理****5. 實用工具函數****6. 高級函數技巧****7. 常用函數庫示例****總結&#xff1a;Bash 函數核心要點**1. 基礎函數 1.1 定義與調用 可以自定義函數名稱&#xff0c;例如將greet改為yana。?…

Python爬蟲實戰:研究rows庫相關技術

1. 引言 在當今數字化時代,互聯網上存在著大量有價值的表格數據,這些數據以 HTML 表格、CSV、Excel 等多種格式存在。然而,由于數據源的多樣性和不規范性,表格結構往往存在復雜表頭、合并單元格、不規則數據行等問題,給數據的自動化處理帶來了巨大挑戰。 傳統的數據處理工…

通過同態加密實現可編程隱私和鏈上合規

1. 引言 2023年9月28日&#xff0c;a16z 的加密團隊發布了 Nakamoto Challenge&#xff0c;列出了區塊鏈中需要解決的最重要問題。尤其是其中的第四個問題格外引人注意&#xff1a;“合規的可編程隱私”&#xff0c;因為Zama團隊已經在這方面積極思考了一段時間。本文提出了使…

封裝---統一封裝處理頁面標題

一.采用工具來實現(setPageTitle.ts)多個頁面中用更統一的方式設置 document.title&#xff0c;可以封裝一個工具函數:在utils目錄下新建文件:setPageTitle.ts如果要在每個頁面設置相同的網站標志可以使用下面的appNameconst appName: string import.meta.env.VITE_APP_NAMEex…

JAVA學習筆記 首個HelloWorld程序-002

目錄 1 前言 2 開發首個程序 3 小結 1 前言 在所有的開發語言中&#xff0c;基本上首先程序就是輸出HelloWorld&#xff0c;這里也不例外。這個需要注意的是&#xff0c;程序的核心功能是數據輸出&#xff0c;是要有一個結果&#xff0c;可能沒有輸入&#xff0c;但是一定有…

智慧監所:科技賦能監獄管理新變革

1. 高清教育&#xff1a;告別模糊畫面&#xff0c;學習更清晰傳統電視的雪花屏終于成為歷史&#xff01;新系統采用高清傳輸&#xff0c;課件文字清晰可見&#xff0c;教學視頻細節分明。某監獄教育科王警官說&#xff1a;"現在播放法律課程&#xff0c;服刑人員能清楚看到…

專題:2025供應鏈數智化與效率提升報告|附100+份報告PDF、原數據表匯總下載

全文鏈接&#xff1a;https://tecdat.cn/?p42926 在全球產業鏈重構與數字技術革命的雙重驅動下&#xff0c;供應鏈正經歷從傳統經驗驅動向數據智能驅動的范式變革。從快消品產能區域化布局到垂類折扣企業的效率競賽&#xff0c;從人形機器人的成本優化到供應鏈金融對中小企業的…

uniapp+vue3+ts項目:實現小程序文件下載、預覽、進度監聽(含項目、案例、插件)

uniapp+vue3+ts項目:實現小程序文件下載、預覽、進度監聽(含項目、案例、插件) 支持封裝調用: 項目采用uniapp+vue3+ts +京東nutUI 開發nutUi文檔:loadingPage組件:https://uniapp-nutui.tech/components/exhibition/loadingpage.html案例效果圖: 略博主自留地:參考本地…

用Python和OpenCV從零搭建一個完整的雙目視覺系統(六 最終篇)

本系列文章旨在系統性地闡述如何利用 Python 與 OpenCV 庫&#xff0c;從零開始構建一個完整的雙目立體視覺系統。 本項目github地址&#xff1a;https://github.com/present-cjn/stereo-vision-python.git 1. 概述 歡迎來到本系列文章的最后一篇。在過去的幾篇文章中&#…

Android View 繪制流程 簡述 (無限遞歸+BitMap問題)

繪制流程 在 Android 的 View 系統中&#xff0c;draw(canvas) 和 dispatchDraw(canvas) 是繪制流程中的兩個關鍵方法&#xff1a; 1. draw(canvas) 方法的作用 draw(canvas) 是 View 類中的核心繪制方法&#xff0c;它的主要職責包括&#xff1a; 繪制背景 - 調用 drawBac…

算法學習筆記:18.拉斯維加斯算法 ——從原理到實戰,涵蓋 LeetCode 與考研 408 例題

在隨機化算法領域&#xff0c;拉斯維加斯&#xff08;Las Vegas&#xff09;算法以其獨特的設計思想占據重要地位。與蒙特卡洛&#xff08;Monte Carlo&#xff09;算法不同&#xff0c;拉斯維加斯算法總能給出正確的結果&#xff0c;但運行時間具有隨機性 —— 在最壞情況下可…

26-計組-指令執行過程

一、指令周期1. 定義與組成定義&#xff1a;CPU取出并執行一條指令所需的全部時間&#xff0c;稱為指令周期。子周期劃分&#xff1a;取指周期&#xff08;必選&#xff09;&#xff1a;從存儲器取指令到指令寄存器&#xff08;IR&#xff09;。間址周期&#xff08;可選&#…

【JMeter】數據驅動測試

文章目錄創建數據文件加載數據文件根據數據文件請求接口、傳遞參數拓展含義&#xff1a;根據數據的數量、內容&#xff0c;自動的決定用例的數據和內容。數據驅動測試用例。步驟&#xff1a; 創建數據文件加載數據文件根據數據文件請求接口、傳遞參數 創建數據文件 Jmeter支…

Springboot實現一個接口加密

首先來看效果這個主要是為了防止篡改請求的。 我們這里采用的是一個AOP的攔截&#xff0c;在有需要這樣的接口上添加了加密處理。 下面是一些功能防篡改HMAC-SHA256 參數簽名密鑰僅客戶端 & 服務器持有防重放秒級時間戳 有效窗口校驗默認允許 5 分鐘防竊聽AES/CBC/PKCS5Pa…

斯坦福 CS336 動手大語言模型 Assignment1 BPE Tokenizer TransformerLM

所有代碼更新至 https://github.com/WangYuHang-cmd/CS336/tree/main/assignment1-basics 作業文件結構: CS336/assignment1-basics/ ├── tests/ # 測試文件目錄 │ ├── adapters.py # 適配器測試 │ ├── conftest.py # pyt…

Spring Cloud Gateway 實戰指南

關鍵詞&#xff1a;微服務、API網關、Spring Cloud Gateway、路由轉發、限流熔斷 ? 文章摘要 隨著互聯網應用規模的不斷擴大&#xff0c;傳統的單體架構逐漸向微服務架構轉型。在微服務架構中&#xff0c;API 網關作為系統的入口點&#xff0c;承擔了諸如請求路由、負載均衡、…