UVa 12100 Printer Queue (习题 5-7)

传送门:https://uva.onlinejudge.org/external/121/12100.pdf

题意:队列中待打印的任务(1 <= n <= 100)带有优先级(1-9), 打印步骤为每次从队首拿出一个, 如果队列中没有优先级比该任务高的, 打印这个任务; 若有优先级高的, 把这个任务放到队尾,  并打印优先级最高的. 每打印一次耗时1分钟, 求给定任务什么时候打印.

水题A半天    不愧是弱渣..........

最坏的情况需要maxn*maxn的空间........

front  rear  记录前后位置

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 
 4 const int MAXN = 111;
 5 int t, n, m, _time;
 6 int que[MAXN*MAXN];
 7 
 8 void process(){
 9     int front = 0, rear = n;
10     while(true){
11         int maxi = que[front];
12         for(int i = front; i < rear; ++i){
13             if(que[i] > maxi){
14                 if(front == m) m = rear;
15                 que[rear++] = que[front++];
16                 break;
17             }
18             else if(i == rear - 1){
19                 ++_time;
20                 if(front == m) return ;
21                 front++; 
22             }
23         }
24     }
25 }
26 int main(){
27     cin >> t;
28     while(t--){
29         _time = 0;
30         cin >> n >> m;
31         for(int i = 0; i < n; ++i) cin >> que[i];
32         process();
33         cout << _time << endl;
34     }
35     return 0;
36 }
原文地址:https://www.cnblogs.com/book-book/p/5335136.html