传送门: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 }
时间: 2024-10-13 05:51:55