赞
踩
话不多说,直接看题:

下面为分析:显然,我们要先合并最小的两堆(因为他们在后边也得被计算,换句话,我们独立的看,某一堆的体力值为他自己重量*从现在到最后的次数)
因此,我们可以用两个队列来做。下面我用图来描述过程:(其实可以直接优先队列)

下面为AC代码:


接题(比较难):

这个题跟上一个有异曲同工之妙,我们可以用3个队列来维护最大长度(用优先队列会超),同时,有个十分巧妙地点,对于某个过程产生的蚯蚓,我们让他们-前面时间增加的长度,这样统一了基准,巧妙地把某个过程产生的蚯蚓化为一开始就产生的。
- #include<bits/stdc++.h>
- using namespace std;
- #define int long long
- int n,m,q,u,v,t,a[100010],ck;
- bool cmp(int a,int b){
- return a>b;
- }
- signed main(){
- scanf("%d%d%d%d%d%d",&n,&m,&q,&u,&v,&t);
- for(int i=1;i<=n;i++){
- scanf("%d",&a[i]);
- }
- sort(a+1,a+n+1,cmp);
- queue<int> q1;
- queue<int> q2;
- queue<int> q3;
- for(int i=1;i<=n;i++){
- q1.push(a[i]);
- }
- for(int i=1;i<=m;i++){
- int max1,a1=-0x7f7f7f7f,a2=-0x7f7f7f7f,a3=-0x7f7f7f7f;
- if(!q1.empty()) a1=q1.front();
- if(!q2.empty()) a2=q2.front();
- if(!q3.empty()) a3=q3.front();
- max1=max(a1,max(a2,a3));
- if(max1==a1) q1.pop();
- else if(max1==a2) q2.pop();
- else q3.pop();
- max1+=(i-1)*q;
- if(i%t==0) cout<<max1<<" ";
- q2.push(max1*u/v-(i)*q);
- q3.push(max1-max1*u/v-(i)*q);
- }
- cout<<endl;
- while(!q1.empty()&&!q2.empty()&&!q3.empty()){
- int a1=q1.front(),a2=q2.front(),a3=q3.front();
- if(a1>=max(a2,a3)){
- q1.pop();
- ck++;
- if(ck%t==0) cout<<a1+q*m<<" ";
- continue;
- }
- if(a2>=max(a1,a3)){
- q2.pop();
- ck++;
- if(ck%t==0) cout<<a2+q*m<<" ";
- continue;
- }
- if(a3>=max(a2,a1)){
- q3.pop();
- ck++;
- if(ck%t==0) cout<<a3+q*m<<" ";
- continue;
- }
- }
- if(q1.empty()){
- while(!q2.empty()&&!q3.empty()){
- if(q2.front()>q3.front()){
- ck++;
- if(ck%t==0)cout<<q2.front()+q*m<<" ";
- q2.pop();
- }
- else{ck++;
- if(ck%t==0)cout<<q3.front()+q*m<<" ";
- q3.pop();
- }
- }
- while(!q2.empty()&&q3.empty()){
- ck++;
- if(ck%t==0)cout<<q2.front()+q*m<<" ";
- q2.pop();
- }
- while(!q3.empty()&&q2.empty()){
- ck++;
- if(ck%t==0) cout<<q3.front()+q*m<<" ";
- q3.pop();
- }
- return 0;
- }
- if(q2.empty()){
- while(!q1.empty()&&!q3.empty()){
- if(q1.front()>q3.front()){
- ck++;
- if(ck%t==0) cout<<q1.front()+q*m<<" ";
- q1.pop();
- }
- else{ck++;
- if(ck%t==0) cout<<q3.front()+q*m<<" ";
- q3.pop();
- }
- }
- while(!q1.empty()&&q3.empty()){
- ck++;
- if(ck%t==0) cout<<q1.front()+q*m<<" ";
- q1.pop();
- }
- while(!q3.empty()&&q1.empty()){
- ck++;
- if(ck%t==0) cout<<q3.front()+q*m<<" ";
- q3.pop();
- }
- return 0;
- }
- if(q3.empty()){
- while(!q2.empty()&&!q1.empty()){
- if(q2.front()>q1.front()){
- ck++;
- if(ck%t==0) cout<<q2.front()+q*m<<" ";
- q2.pop();
- }
- else{ck++;
- if(ck%t==0) cout<<q1.front()+q*m<<" ";
- q1.pop();
- }
- }
- while(!q2.empty()&&q1.empty()){
- ck++;
- if(ck%t==0) cout<<q2.front()+q*m<<" ";
- q2.pop();
- }
- while(!q1.empty()&&q2.empty()){
- ck++;
- if(ck%t==0) cout<<q1.front()+q*m<<" ";
- q1.pop();
- }
- }
- }

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。