85pts 三个点RE求调
查看原帖
85pts 三个点RE求调
398173
_zyx楼主2022/3/26 11:26
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue> 
#include<algorithm>
#include<cmath>
#define ll long long
using namespace std;
const int N=1e5+10;
queue<int> A,B,C;
int n,m,q,u,v,t,a[N];

bool cmp(int a,int b){
	return a > b;
}
priority_queue<int> ans;
int 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);
	for(int i=1;i<=n;i++) A.push(a[i]);
	double p=u*1.0/v;
	int delta=0,x=0;
	for(int i=1;i<=m;i++){
		int a=-1,b=-1,c=-1;
		if(!A.empty()) a=A.front();
		if(!B.empty()) b=B.front();
		if(!C.empty()) c=C.front();
		if(a >= b){
			if(a >= c){
				x=a;
				A.pop();
			}
			else{
				x=c;
				C.pop();
			}
		}
		else{
			if(b >= c){
				x=b;
				B.pop();
			}
			else{
				x=c;
				C.pop();
			}
		}
		x+=delta;
		B.push(floor(p*x)-delta-q);
		C.push(x-floor(p*x)-delta-q);
		delta+=q;
		if(i%t == 0){
			printf("%d ",x);
		}
	}
	printf("\n");
	while(!A.empty()){
		ans.push(A.front());
		A.pop();
	}
	while(!B.empty()){
		ans.push(B.front());
		B.pop();
	}
	while(!C.empty()){
		ans.push(C.front());
		C.pop();
	}
	int i=0;
	while(!ans.empty()){
		i++;
		if(i%t == 0){
			printf("%d ",ans.top()+delta);
		}
		ans.pop();
	}
	return 0;
}

2022/3/26 11:26
加载中...