第二个wa,不理解,求大佬帮眼
查看原帖
第二个wa,不理解,求大佬帮眼
921227
Jamison_Tam楼主2023/3/13 12:20
#define _CRT_SECURE_NO_DEPRECATE
#include<iostream>
#include<vector>
#include<cmath>
#include<iomanip>
#include <sstream>
#include<algorithm>
#include <cstdio>
#include<string>
typedef struct gold {
	double weight, value;
	double per_value;
};
std::vector<gold*>v;
void swap1(gold* g1, gold* g2) {
	std::swap(g1->weight, g2->weight);
	std::swap(g1->value, g2->value);
	std::swap(g1->per_value, g2->per_value);
}
void quicksort(int s,int e) {
	if (s > e)
		return;
	else {
		gold* temp = new gold();
		temp->weight = v[s]->weight;
		temp->value = v[s]->value;
		temp->per_value = v[s]->per_value;
		int i = s, j = e;
		while (i < j) {
			while (i < j && v[j]->per_value >= temp->per_value)
				j--;
			while (i < j && v[i]->per_value <= temp->per_value)
				i++;
			if (i < j)
				swap1(v[i], v[j]);
		}
		swap1(v[s], v[i]);
		swap1(v[i], temp);
		quicksort(s, i - 1);
		quicksort(i + 1, e);
	}
}
void control_point2(double num) {
	int numi = num;
	int less = (num - numi)*100;
	std::cout << numi<<".";
	if (less >= 10)
		std::cout << less;
	else
		std::cout << 0 << less;

}
int main() {
	double n,t;
	std::cin >> n>>t;
	for (int i = 0; i < n; i++) {
		gold* g = new gold();
		std::cin >> g->weight >> g->value;
		g->per_value = g->value / g->weight;
		v.push_back(g);
	}
	quicksort(0, v.size() - 1);
	int max = v.size()-1;
	double value = 0;
	while (t>0&&max>=0) {
		int num = std::min(v[max]->weight,t);
		value += num * v[max]->per_value;
		t -= num;
		max--;
	}
	control_point2(value);
}

2023/3/13 12:20
加载中...