求助,第一个测试点怎么都过不了,跪谢
查看原帖
求助,第一个测试点怎么都过不了,跪谢
1119526
ouyangziheng楼主2023/12/21 23:25
#include<iostream>
#include<iomanip>
using namespace std;

struct ku{
	double sum;
	double n;
	double prize;
	void setprize(){
		prize=sum/n;
	}
};

void swap(ku &a,ku &b){
	ku temp=a;
	a=b;
	b=temp;
}

void quicksort(ku zu[],int low,int high){
	if(low>=high){
		return;
	}else{
		int i=low ;int j=high ; double base=zu[(i+j)/2].prize;
		while(i<=j){
			while(zu[i].prize>base){
			    i++;
			}

			while(zu[j].prize<base){
			    j--;
			}
            
			if(i<=j){
				swap(zu[i],zu[j]);
				i++;
				j--;
			}
		}
		quicksort(zu,low,j);
		quicksort(zu,i,high);
	}
}

int  main(){
	ku t[200];
	int n,num=0;
    double ans=0;
	cin>>n>>num;

	for(int i=0;i<n;i++){
		cin>>t[i].n;
		cin>>t[i].sum;
		t[i].setprize();
	}

	quicksort(t,0,n-1);

	int j=0;
	while(num>0){
		if(num>t[j].n){
			ans+=t[j].sum;
			num-=t[j].n;
			j++;
		}else{
			ans+=num*t[j].prize;
            break;
		}
	}

	cout<<fixed<<setprecision(2)<<ans;
	system("pause");
	return 0;
}
2023/12/21 23:25
加载中...