天天看點

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