uva 12100 Printer Queue(列印佇列)模擬
阿新 • • 發佈:2019-02-14
思路:按照輸入的順序,將每個任務入隊,同時用另一個數組儲存這些優先順序,然後按照從大到小或者從小到大的順序對陣列排序,表示每個執行的先後順序。然後對佇列進行操作,先從佇列頭取出一個元素,判斷是不是和陣列的下標指向的值相等,若相等,則列印的時間數+1,同時陣列下標+1或者-1,若不相等,則直接扔到隊尾,重新開始下一次迴圈。
(開始理解錯題意,認為是把佇列中優先順序最高的任務直接移除,而忽略了佇列只能一個一個的出)
import java.util.Arrays; import java.util.LinkedList; import java.util.Queue; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scan = new Scanner(System.in); int t = scan.nextInt(); while(t--!=0){ int n = scan.nextInt(); int m = scan.nextInt(); Queue<Num> q = new LinkedList<>(); int[] A = new int[n]; for(int i=0;i<n;i++){ int p = scan.nextInt(); Num num = new Num(p,i); q.add(num); A[i] = p; } Arrays.sort(A); int j = n-1; int cnt = 0; boolean ok = false; while(!ok){ Num num = q.peek(); q.poll(); if(num.value==A[j]){ cnt++; j--; if(num.pos==m){ ok = true; } }else{ q.add(num); } } System.out.println(cnt); } } static class Num{ int value; int pos; public Num(int value,int pos){ this.value = value; this.pos = pos; } } }