#include<iostream>
#include<iomanip>
#include<stdlib.h>
#include<stdio.h>
#include<algorithm>
using namespace std;
struct room
{
double amount,l;
int number;
};
int comp(const void *x,const void *y);
int main()
{
int n,m,k;
double sum;
while(cin>>n>>m)
{
sum=0;
if(n==-1&&m==-1)
break;
room *a=new room [m];
for(k=0;k<m;k++)
{
cin>>a[k].amount>>a[k].number;
a[k].l=a[k].amount/a[k].number;
}
qsort(a,m,sizeof(a[0]),comp);
for(k=0;k<m;k++)
{
if(n>a[k].number)
{
sum+=a[k].amount;
n-=a[k].number;
}
else
{
sum+=double(n)/a[k].number*a[k].amount;
break;
}
}
// for(k=0;k<m;k++)
// cout<<a[k].amount<<" "<<a[k].number<<" "<<a[k].l<<endl;
cout<<setiosflags(ios::fixed)<<setprecision(3)<<sum<<endl;
delete [] a;
}
return 0;
}
int comp(const void *x,const void *y)
{
return (*(room *)y).l>(*(room *)x).l?1:-1;
}
以上代码中qsort的比较函数如果写成上述代码形式可以过杭电1009
而如果写成
int comp(const void x,const void *y)
{
return ((room )y).l-((room *)x).l;
}
则过不了,请问大神们这两种写法有什么区别啊?
int comp(const void *x,const void *y)
{
return (*(room *)y).l>(*(room *)x).l?1:-1;
}
和
int comp(const void *x,const void *y)
{
return (*(room *)y).l-(*(room *)x).l;
}