Printer Queue 打印队列 UVA 12100

梦里梦外; 2024-02-17 18:49 110阅读 0赞

解题思路:我的做法是通过队列queue(保存队列)和vector容器(通过sort完成从小到大的排序)完成,只有遇到队列中优先级最高(数字最大)才能移除队列,时间加1(total++);而指定的元素位置仍用m标识,每一次移动m都向前挪动一个。当队列中元素移除一个时,最大元素就变了(通过v—来控制)

  1. #include
  2. #include
  3. #include
  4. #include
  5. using namespace std;
  6. queueq;
  7. vectorvec;
  8. int main(){
  9. int T;
  10. scanf(“%d”,&T);
  11. while(T—){
  12. int n,m;
  13. scanf(“%d%d”,&n,&m);
  14. for(int i=0;i<n;i++)
  15. {
  16. int temp;
  17. scanf(“%d”,&temp);
  18. q.push(temp);
  19. vec.push_back(temp);
  20. }
  21. sort(vec.begin(),vec.end());
  22. int v=n-1; //vec[v]表示最大元素
  23. int total=0;
  24. while(true){
  25. int t=q.front();q.pop(); //取出一个元素并暂时删除
  26. if(m==0 && t>=vec[v]){
  27. total++;
  28. break;
  29. }
  30. else if(t>=vec[v]){ //当取出的值大于当前最大值时,移除,同时m—;
  31. total++;
  32. m=(m-1+v+1)%(v+1);
  33. v—;
  34. }
  35. else {
  36. q.push(t);
  37. m=(m-1+v+1)%(v+1);
  38. }
  39. }
  40. printf(“%d\n”,total);
  41. vec.clear();
  42. while(true)if(!q.empty())q.pop();else break; //最后别忘了清空容器
  43. }
  44. return 0;
  45. }

解题思路:我的做法是通过队列queue(保存队列)和vector容器(通过sort完成从小到大的排序)完成,只有遇到队列中优先级最高(数字最大)才能移除队列,时间加1(total++);而指定的元素位置仍用m标识,每一次移动m都向前挪动一个。当队列中元素移除一个时,最大元素就变了(通过v—来控制)

发表评论

表情:
评论列表 (有 0 条评论,110人围观)

还没有评论,来说两句吧...

相关阅读

    相关 队列Queue

    队列是一种数据结构,它只允许在队列尾部(rear)加人一个元素,和从队列头部(front)移除一个元素。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称

    相关 Queue--队列

    队列(Queue)和栈不同,队列是只允许在一端插入,在另一端进行删除的线性表,所有的插入操作都在队尾进行,删除操作则在队头进行。入队和出队顺序一样。 由于数组在删除元素的时候