传送门: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