标签:
描述 : 输入打印任务及关注的任务在输入中的位置,从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