关于测试点2:一开始amount我设的是int型,测试点2错误,看了网上的答案,把int改成float就对了(被给的example坑到了,没想到可以为小数
#include<iostream> #include<vector> #include<algorithm> using namespace std; struct mk { float amount; float price; float per; }; bool compare(mk m1, mk m2) { return m1.per > m2.per; } vector<mk>info; int main() { int N,D; cin >> N>>D; info.resize(N); for (int i = 0; i < N; i++) cin >> info[i].amount; for (int i = 0; i < N; i++) { cin >> info[i].price; info[i].per = info[i].price / info[i].amount; } sort(info.begin(), info.end(), compare); int count = 0; float profit = 0; while (D != 0) { if(info[count].amount < D) { profit += info[count].amount * info[count].per; D -= info[count].amount; count++; } else { profit += D * info[count].per; D = 0; } if (count > N) break; } printf("%.2f" ,profit); return 0; }