首页 > 学院 > 开发设计 > 正文

uva 12100 Printer Queue(打印队列)模拟

2019-11-06 07:26: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;		}	}}


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表