P2827 [NOIP2016 提高组] 蚯蚓

 

 

//ios::sync_sith_stdio(false) -> no cin.tie(0)
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<bits/stdc++.h>
#define ll long long
#define ddd printf("-----------------debug\n");
using namespace std;
const int maxn=7e6+10;

int cut1[maxn],cut2[maxn],now[maxn],sigma,h0=1,h1=1,t1=0,h2=1,t2=0,top;
int n,m,q,u,v,t;
double p;
priority_queue<int> ans;

bool cmp(int a,int b){ return a>b;}

int main()
{
    ios::sync_with_stdio(false); 
    cin>>n>>m>>q>>u>>v>>t;
    p=(double)u/v;
    for(int i=1;i<=n;i++) cin>>now[i];
    sort(now+1,now+1+n,cmp);
    
    for(int i=1;i<=m;i++)
    {
        if(h0>n){ if(cut1[h1]>=cut2[h2]) top=cut1[h1++]; else top=cut2[h2++]; }
        else if(now[h0]>=cut1[h1]&&now[h0]>=cut2[h2]) top=now[h0++];
        else if(cut1[h1]>=now[h0]&&cut1[h1]>=cut2[h2]) top=cut1[h1++];
        else top=cut2[h2++];
        
        top+=sigma;if(i%t==0) cout<<top<<" ";//printf("%d ",top);//
        
        int a1=floor((double)top*p),a2=top-a1;
        sigma+=q;  a1-=sigma,a2-=sigma; cut1[++t1]=a1,cut2[++t2]=a2;
    }
    
    cout<<'\n';//putchar('\n');
    for(int i=h0;i<=n;i++) ans.push(now[i]);
    for(int i=h1;i<=t1;i++) ans.push(cut1[i]);
    for(int i=h2;i<=t2;i++) ans.push(cut2[i]);
    
    for(int i=1;ans.size();i++){
        if(i%t==0)  cout<<ans.top()+sigma<<" ";//printf("%d ",ans.top()+sigma);//
        ans.pop();
    }

    return 0;
}
View Code

 

 
posted @ 2023-08-17 11:45  JMXZ  阅读(9)  评论(0)    收藏  举报