蚯蚓
作者:互联网
这道题通过隐含的条件可以发现产生的两类数是符合单调性的,就可以通过队列来维护
代码
#include<bits/stdc++.h> using namespace std; const int N=7e6+5; int n,m,q,u,v,tl; int t[3],h[3],delta,ans[N]; int a[3][N]; int main(){ scanf("%d%d%d%d%d%d",&n,&m,&q,&u,&v,&tl); double p=(double)u/v; for(int i=1;i<=n;i++) scanf("%d",&a[0][i]); sort(a[0]+1,a[0]+n+1);reverse(a[0]+1,a[0]+n+1);//从大到小 h[0]=h[1]=h[2]=1;t[0]=n; for(int i=1;i<=m;i++){ int cs=0; if(h[1]<=t[1]&&a[1][h[1]]>=a[cs][h[cs]]||(h[0]>t[0]))cs=1;//注意队头不能超过队尾 if(h[2]<=t[2]&&a[2][h[2]]>=a[cs][h[cs]])cs=2; int top=a[cs][h[cs]];++h[cs]; top+=delta; int a1=floor(p*(double)top),a2=top-a1; delta+=q; a1-=delta,a2-=delta; a[1][++t[1]]=a1,a[2][++t[2]]=a2; if(i%tl==0)printf("%d ",top);//输出 } puts(""); int cnt=0; for(int i=0;i<3;i++) for(int j=h[i];j<=t[i];j++) ans[++cnt]=a[i][j]; sort(ans+1,ans+cnt+1);//排序 for(int i=cnt,j=1;i;i--,j++) if(j%tl==0) printf("%d ",ans[i]+delta);//加上偏移值 }
标签:int,top,d%,a1,delta,cs,蚯蚓 来源: https://www.cnblogs.com/coder-cjh/p/11373610.html