首页 > 代码库 > UVa 12100 - Printer Queue

UVa 12100 - Printer Queue

描述 : 输入打印任务及关注的任务在输入中的位置,从0开始。如果当前任务的优先级不是最高的则把当前任务加在队列最后。计算当前任务打印完成的时刻。每个任务的打印都是需要1分钟。

思路 : 类似于优先级队列,但是不一样。设置一个数组记录优先级并由大到小排序,然后模拟执行。

代码 :

import java.util.*;

public class Main12100 {

	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		int t = scan.nextInt();
		while(t-- > 0) {
			Queue<work> q = new LinkedList<work>();
			int n = scan.nextInt();
			int f = scan.nextInt();
			work[] w = new work[n];
			for(int i=0; i<n; i++) {
				int p = scan.nextInt();
				if(i == f) {
					w[i] = new work(p, -1);
					q.offer(w[i]);
				}else {
					w[i] = new work(p, i);
					q.offer(w[i]);
				}
			}
			for(int j=0; j<n-1; j++) {
				for(int i=0; i<n-1-j; i++) {
					if(w[i].pori < w[i+1].pori) {
						work k = w[i];
						w[i] = w[i+1];
						w[i+1] = k;
					}
				}
			}
			int cnt = 0;
			while(true) {
				work temp = q.peek();
				//if(temp.flag == -1)break;
				if(temp.pori == w[cnt].pori) {
					if(temp.flag == -1)break;
					else {
					    q.poll();
					    cnt ++;
					}
				}else {
					q.offer(q.poll());
				}
			}
			cnt ++;
			System.out.println(cnt);
		}
	}
}
class work {
	public int pori;
	public int flag;
	public work(int p, int f) {
		pori = p;
		flag = f;
	}
}


 

UVa 12100 - Printer Queue