8个RE,求助
查看原帖
8个RE,求助
1069088
lxy_ayaka楼主2024/4/16 19:29

玩原神玩的

#include<bits/stdc++.h>
using namespace std;
const int N=1e4+10;
int n,m,ans[N];

struct Function{
	int a,b,c;
	int mi;
	int x=2;
	void input(){
		cin >> a >> b >> c;
		mi=a+b+c;
	}
}f[N];

struct No{
	int v=INT_MAX;
	Function* p;
}no[N];

int ge(Function a){
	int ans=a.a*a.x*a.x+a.b*a.x+a.c;
	return ans;
}

bool cmp(Function a,Function b){
	return a.mi<b.mi;
}

bool cmp2(No a,No b){
	return a.v<b.v;
}

int main(){
	cin >> n >> m;
	for(int i=1;i<=n;i++) f[i].input();
	sort(f+1,f+n+1,cmp);
	for(int i=1;i<=n;i++){
		no[i].p=&f[i];
		no[i].v=ge(f[i]);
	}
	sort(no+1,no+n+1,cmp2);
	ans[1]=f[1].mi;
	int cnt=2; // cnt用于记录f.mi走到哪里 
	no[1].v=ge(f[1]);
	for(int i=2;i<=m;i++){// i为ans服务 
		int j=1;
		if(cnt<n){
			while(no[j].v<f[cnt].mi){
				j++;
				ans[i]=no[j].v;
				f[cnt].x++;
				no[j].v=ge(*no[cnt].p);
			}
			if(no[j-1].v==f[cnt].mi){
				ans[i]=no[j-1].v;
				ans[i+1]=f[cnt].mi;
				no[j-1].v=ge(*no[j-1].p);
				no[j-2].v=ge(*no[j-2].p);
				i++;
				cnt++;
			}else{
				ans[i]=f[cnt].mi;
				no[cnt].v=ge(*no[cnt].p);
				cnt++;
			}
		}else if(cnt==n){
			ans[i]=f[n].mi;
			cnt++;
		}else{
			ans[i]=no[1].v;
			no[1].p->x++;
			no[1].v=ge(*no[1].p);
		}
		sort(no+1,no+n+1,cmp2);
	}
	for(int i=1;i<=m;i++) cout << ans[i] << " ";
}
2024/4/16 19:29
加载中...