标签:
描述 : 输入打印任务及关注的任务在输入中的位置,从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; } }
标签:
原文地址:http://blog.csdn.net/wxisme/article/details/42224495