P2827 蚯蚓
本题主要有4个任务:找最值,删,插入px、x-px,长q
本题要注意隐含的单调性,先被切掉的蚯蚓分成的蚯蚓一定比后切掉的蚯蚓分成的蚯蚓大;还要注意偏移量的使用,除了被切的那条蚯蚓,其余所有蚯蚓的长度每秒内均增长q,所以可以将被切的蚯蚓减q,其余蚯蚓长度不变,最后所有蚯蚓加上偏移量就是实际的长度。
AC代码:
#include <bits/stdc++.h>
using namespace std;
queue<int>Q[3];
int get_max(){
int len=INT_MIN, pos;
for(int i=0;i<3;i++){
if(!Q[i].empty()&&len<Q[i].front()){
len=Q[i].front();
pos=i;
}
}
Q[pos].pop();
return len;
}
int main(){
// freopen("1.txt","r",stdin);
int n,m,q,u,v,t;
scanf("%d%d%d%d%d%d",&n,&m,&q,&u,&v,&t);
double p = u*1.0/v;
vector<int>animal(n);
for(int i=0;i<n;i++)
scanf("%d",&animal[i]);
sort(animal.begin(),animal.end(),greater<int>());
for(int i=0;i<animal.size();i++)
Q[0].push(animal[i]);
int delta=0;
for(int i=1;i<=m;i++){
int len=get_max();
len+=delta;
if(i%t==0) printf("%d ",len);
int x1=p*len,x2=len-x1;
Q[1].push(x1-delta-q);
Q[2].push(x2-delta-q);
delta+=q;
}
printf("\n");
for(int i=1;i<=n+m;i++){
int len=get_max();
if(i%t==0) printf("%d ",len+delta);
}
return 0;
}