列印佇列(Printer Queue)
Printer Queue
Time limit: 3.000 seconds
【分析】
首先記錄所求時間它在佇列中的位置,用一個佇列儲存這些任務的優先順序,同時也建立一個佇列儲存對應任務一開始的位置,那麼當我們對前一個佇列進行什麼操作時,後一個佇列也跟著做什麼操作即可,就可以保證兩個佇列的對應關係——任務對應初始位置。進行模擬時,從第一個佇列取出一個任務(同時第二個佇列也是進行同樣的操作),判斷該任務是否可以列印(通過迴圈判斷,佇列後面的元素任務優先順序有木有大於當前任務的優先順序即可),如果可以列印就將所求列印時間加1,並且判斷是否是我們所求時間的位置,如果是,則停止模擬,如果不是則繼續以上操作;如果不可以進行列印就將剛才取出來的數重新加到隊尾(兩個佇列均是這樣操作)。
用java語言編寫程式,程式碼如下:
import java.util.Iterator; import java.util.LinkedList; import java.util.Queue; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner input = new Scanner(System.in); int t = input.nextInt(); for(int i = 0; i < t; i++) { int n = input.nextInt(); int pos = input.nextInt(); Queue<Integer> q = new LinkedList<Integer>(); Queue<Integer> qn = new LinkedList<Integer>(); for(int j = 0; j < n; j++) { int temp = input.nextInt(); q.add(temp); qn.add(j); } int time = 0; while(true) { int temp = q.poll(); int num = qn.poll(); if(goOnPrint(temp, q)) { time++; if(num == pos) break; } else { q.add(temp); qn.add(num); } } System.out.println(time); } } public static boolean goOnPrint(int t, Queue<Integer> q) { Iterator<Integer> iterator = q.iterator(); while(iterator.hasNext()) { int v = iterator.next(); if(v > t) return false; } return true; } }
相關推薦
列印佇列(Printer Queue)
Printer Queue Time limit: 3.000 seconds 【分析】 首先記錄所求時間它在佇列中的位置,用一個佇列儲存這些任務的優先順序,同時也建立一個佇列儲存對應
關於“列印佇列 Printer Queue, ACM/ICPC NWERC 2006, UVa 12100)"的討論
列印佇列有兩個屬性,一個是優先順序一個是位置,可以寫一個結構體儲存這些資訊再利用queue的特性完成本題 #include<iostream> #include<queue> #include<vector> using namespac
Printer Queue列印佇列
The only printer in the computer science students' union is experiencing an extremely heavy workload. Sometimes there are a hundred jobs in the printer qu
UVa12100 Printer Queue (列印佇列)
12100 Printer Queue Input One line with a positive integer : the number of test cases(at most 100). Then for each test case:
5-7 UVA 12100 Printer Queue列印佇列
大致題意: 輸入一定數量的列印任務,並伴隨有優先順序,按優先順序從大到小的順序列印,從隊首(位置為0)開始列印,發現隊後存在一個列印任務的優先順序高於自己,則自己放於隊後,先列印優先順序高的。 整體思路: 不用想,根據題意,存資料(優先順序)用肯定用queue存(當然有很多
Printer Queue(列印佇列)POJ3125
The only printer in the computer science students' union is experiencing an extremely heavy workload. Sometimes there are a hundred jobs in the printer qu
uva 12100 Printer Queue(列印佇列)模擬
思路:按照輸入的順序,將每個任務入隊,同時用另一個數組儲存這些優先順序,然後按照從大到小或者從小到大的順序對陣列排序,表示每個執行的先後順序。然後對佇列進行操作,先從佇列頭取出一個元素,判斷是不是和陣
poj 3125 Printer Queue (佇列)
The only printer in the computer science students' union is experiencing an extremely heavy workload. Sometimes there are a hundred jobs in the printer que
打印隊列 (Printer Queue,ACM/ICPC NWERC 2006,UVA12100)
priority clu names 技術 使用 info 一個 esp 描述 題目描述: 題目思路: 使用一個隊列記錄數字,一個優先隊列記錄優先級,如果相等即可打印; 1 #include <iostream> 2 #include <
LeetCode232之用棧實現佇列(Implement Queue using Stacks)
一、題目 二、一種解題思路 1)介紹:雙棧實現佇列法 方法解析:使用兩個棧做為基礎,一個棧儲存輸入的元素,另外一個棧將前面棧中的元素儲存到自己中,這樣就實現了佇列的效果,最先進的元素在in棧的棧底,out棧的棧頂。 ()從一個棧到另外一個棧的操作,僅在out
Java佇列(Queue)用法
佇列是一種特殊的線性表,它只允許在表的前端進行刪除操作,而在表的後端進行插入操作。 LinkedList類實現了Queue介面,因此我們可以把LinkedList當成Queue來用。 以下例項演示了佇列(Queue)的用法: import java.util.LinkedList; im
Java併發環境下的佇列(Queue)概述
本文作者:王一飛,叩丁狼高階講師。原創文章,轉載請註明出處。 概念 佇列 佇列是一種特殊的線性表,是一種先進先出(FIFO)的資料結構。它只允許在表的前端(front)進行刪除操作,而在表的後端(rear)進行插入操作。進行插入操作的端稱為隊尾,進行刪除操
迴圈佇列和鏈佇列(queue)
迴圈佇列和鏈佇列(queue) 佇列的定義:佇列是一種特殊的線性表,是一種先進先出(FIFO)的資料結構。它只允許在表的前端(front)進行刪除操作,而在表的後端(rear)進行插入操作。進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。佇列中沒有元素時,稱為空佇列。
我理解的資料結構(三)—— 佇列(Queue)
我理解的資料結構(三)—— 佇列(Queue) 一、佇列 佇列是一種線性結構 相比陣列,佇列對應的操作是陣列的子集 只能從一端(隊尾)新增元素,只能從另一端(隊首)取出元素 佇列是一種先進先出的資料結構(FIFO) 二、陣列佇列與迴圈佇列 1. 陣列佇列 如果你有看過我之前
Python資料結構——佇列(queue)
先入隊的元素先出隊,即先進先出(first in first out,FIFO)。 在python中同樣可以使用列表,來構建一個佇列。 # -*- coding:utf-8 -*- # file: pyqueue.py # class PyQueue: # 建立佇
佇列(queue)的定義,佇列的儲存結構
佇列定義 佇列(queue )簡稱隊,它同堆疊一樣,也是一種運算受限的線性表, 其限制是僅允許在表的一端進行插入,而在表的另一端進行刪除。 在佇列中把插入資料元素的一端稱為 隊尾(rear) ),刪除資料元素的一端稱為 隊首(front) )。 向隊尾插入元素稱為 進隊或入隊,新元素入隊後成為新
五、佇列(Queue)
一、概述 佇列(queue): 只允許在一端進行插入 (隊尾) 操作,而在另一端 (隊頭) 進行刪除操作的線性表。 隊頭:刪除操作的一端——front 隊尾:插入操作的一端——rear 特點:先進先出(First In First Out) 其他常用佇列:迴圈佇列
【c#】佇列(Queue)和MSMQ(訊息佇列)的基礎使用
首先我們知道佇列是先進先出的機制,所以在處理併發是個不錯的選擇。然後就寫兩個佇列的簡單應用。 Queue 名稱空間 名稱空間:System.Collections,不在這裡做過多的理論解釋,這個東西非常的好理解。 可以看下官方文件:https://docs.microsof
併發並行,同步非同步,同步鎖,遞迴鎖,同步條件(event),訊號量(Semaphore),佇列(queue),生產者消費者
併發&並行 併發:是指系統具有處理 多個任務(動作)的能力(分著切換進行)。一個cpu就能實現併發,一邊聽歌一邊打遊戲 並行:是指系統具有同時處理 多個任務(唯一的時刻,同一時刻)。多核(4核處理4個任務) 並行是併發的子集 同步&非同步 同步:
用c++基於模板實現的可設定容量的佇列(Queue)
環境介紹 c++14標準,clion+mingw編譯成功,vs2008下面編譯也成功 佇列及實現介紹 先進先出的特性 實現時基於陣列的,可以構造時傳入佇列容量 由於基於模板程式設計,佇列可以儲存多