题目:https://pintia.cn/problem-sets/994805260223102976/problems/994805301562163200
这题对于C++选手来说,用sort函数即可。
但是对于C选手来说,如果用qsort函数,在自己写比较函数时,要注意,qsort函数是不稳定的。我们按照单价对结构体元素从大到小排序时,只有大于才交换,否则不交换。
#include <stdio.h>
#include <stdlib.h>
int N;
double D;
struct Cake {
double re;//库存
double p;//总价
double pp;//单价
} cake[1010];
int cmp(const void *elem1,const void *elem2);
int main(void) {
int i;
double ans=0;
scanf("%d %lf",&N,&D);
for(i=0; i<N; i++) {
scanf("%lf",&cake[i].re);
}
for(i=0; i<N; i++) {
scanf("%lf",&cake[i].p);
cake[i].pp=cake[i].p/cake[i].re;
}
qsort(cake,N,sizeof(cake[0]),cmp);
for(i=0;i<N;i++){
if(cake[i].re<=D){
D-=cake[i].re;
ans+=cake[i].p;
}else{
ans+=cake[i].pp*D;
break;
}
}
printf("%.2lf\n",ans);
return 0;
}
int cmp(const void *elem1,const void *elem2) {
struct Cake *c1=(struct Cake *)elem1;
struct Cake *c2=(struct Cake *)elem2;
if((*c2).pp - (*c1).pp>0){
return 1;
}else{
return -1;
}
}