传送门:
题意:队列中待打印的任务(1 <= n <= 100)带有优先级(1-9), 打印步骤为每次从队首拿出一个, 如果队列中没有优先级比该任务高的, 打印这个任务; 若有优先级高的, 把这个任务放到队尾, 并打印优先级最高的. 每打印一次耗时1分钟, 求给定任务什么时候打印.
水题A半天 不愧是弱渣..........
最坏的情况需要maxn*maxn的空间........
front rear 记录前后位置
1 #include2 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 }