当前位置:   article > 正文

备战蓝桥杯---数据结构与STL应用(入门1)

备战蓝桥杯---数据结构与STL应用(入门1)

话不多说,直接看题:

下面为分析:显然,我们要先合并最小的两堆(因为他们在后边也得被计算,换句话,我们独立的看,某一堆的体力值为他自己重量*从现在到最后的次数)

因此,我们可以用两个队列来做。下面我用图来描述过程:(其实可以直接优先队列

下面为AC代码:

接题(比较难):

这个题跟上一个有异曲同工之妙,我们可以用3个队列来维护最大长度(用优先队列会超),同时,有个十分巧妙地点,对于某个过程产生的蚯蚓,我们让他们-前面时间增加的长度,这样统一了基准,巧妙地把某个过程产生的蚯蚓化为一开始就产生的。

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define int long long
  4. int n,m,q,u,v,t,a[100010],ck;
  5. bool cmp(int a,int b){
  6. return a>b;
  7. }
  8. signed main(){
  9. scanf("%d%d%d%d%d%d",&n,&m,&q,&u,&v,&t);
  10. for(int i=1;i<=n;i++){
  11. scanf("%d",&a[i]);
  12. }
  13. sort(a+1,a+n+1,cmp);
  14. queue<int> q1;
  15. queue<int> q2;
  16. queue<int> q3;
  17. for(int i=1;i<=n;i++){
  18. q1.push(a[i]);
  19. }
  20. for(int i=1;i<=m;i++){
  21. int max1,a1=-0x7f7f7f7f,a2=-0x7f7f7f7f,a3=-0x7f7f7f7f;
  22. if(!q1.empty()) a1=q1.front();
  23. if(!q2.empty()) a2=q2.front();
  24. if(!q3.empty()) a3=q3.front();
  25. max1=max(a1,max(a2,a3));
  26. if(max1==a1) q1.pop();
  27. else if(max1==a2) q2.pop();
  28. else q3.pop();
  29. max1+=(i-1)*q;
  30. if(i%t==0) cout<<max1<<" ";
  31. q2.push(max1*u/v-(i)*q);
  32. q3.push(max1-max1*u/v-(i)*q);
  33. }
  34. cout<<endl;
  35. while(!q1.empty()&&!q2.empty()&&!q3.empty()){
  36. int a1=q1.front(),a2=q2.front(),a3=q3.front();
  37. if(a1>=max(a2,a3)){
  38. q1.pop();
  39. ck++;
  40. if(ck%t==0) cout<<a1+q*m<<" ";
  41. continue;
  42. }
  43. if(a2>=max(a1,a3)){
  44. q2.pop();
  45. ck++;
  46. if(ck%t==0) cout<<a2+q*m<<" ";
  47. continue;
  48. }
  49. if(a3>=max(a2,a1)){
  50. q3.pop();
  51. ck++;
  52. if(ck%t==0) cout<<a3+q*m<<" ";
  53. continue;
  54. }
  55. }
  56. if(q1.empty()){
  57. while(!q2.empty()&&!q3.empty()){
  58. if(q2.front()>q3.front()){
  59. ck++;
  60. if(ck%t==0)cout<<q2.front()+q*m<<" ";
  61. q2.pop();
  62. }
  63. else{ck++;
  64. if(ck%t==0)cout<<q3.front()+q*m<<" ";
  65. q3.pop();
  66. }
  67. }
  68. while(!q2.empty()&&q3.empty()){
  69. ck++;
  70. if(ck%t==0)cout<<q2.front()+q*m<<" ";
  71. q2.pop();
  72. }
  73. while(!q3.empty()&&q2.empty()){
  74. ck++;
  75. if(ck%t==0) cout<<q3.front()+q*m<<" ";
  76. q3.pop();
  77. }
  78. return 0;
  79. }
  80. if(q2.empty()){
  81. while(!q1.empty()&&!q3.empty()){
  82. if(q1.front()>q3.front()){
  83. ck++;
  84. if(ck%t==0) cout<<q1.front()+q*m<<" ";
  85. q1.pop();
  86. }
  87. else{ck++;
  88. if(ck%t==0) cout<<q3.front()+q*m<<" ";
  89. q3.pop();
  90. }
  91. }
  92. while(!q1.empty()&&q3.empty()){
  93. ck++;
  94. if(ck%t==0) cout<<q1.front()+q*m<<" ";
  95. q1.pop();
  96. }
  97. while(!q3.empty()&&q1.empty()){
  98. ck++;
  99. if(ck%t==0) cout<<q3.front()+q*m<<" ";
  100. q3.pop();
  101. }
  102. return 0;
  103. }
  104. if(q3.empty()){
  105. while(!q2.empty()&&!q1.empty()){
  106. if(q2.front()>q1.front()){
  107. ck++;
  108. if(ck%t==0) cout<<q2.front()+q*m<<" ";
  109. q2.pop();
  110. }
  111. else{ck++;
  112. if(ck%t==0) cout<<q1.front()+q*m<<" ";
  113. q1.pop();
  114. }
  115. }
  116. while(!q2.empty()&&q1.empty()){
  117. ck++;
  118. if(ck%t==0) cout<<q2.front()+q*m<<" ";
  119. q2.pop();
  120. }
  121. while(!q1.empty()&&q2.empty()){
  122. ck++;
  123. if(ck%t==0) cout<<q1.front()+q*m<<" ";
  124. q1.pop();
  125. }
  126. }
  127. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/46756?site
推荐阅读
相关标签
  

闽ICP备14008679号