一开始以为浮点数有精度损失,在输出那里写 printf("%.3lf\n",sum+0.0001);结果WA了。不需要考虑精度损失。
#include<cstdio>
#include<iostream>
#include<cstring>
#include<set>
#include<algorithm>
#define MAXN 5010
using namespace std;
struct Node
{
int j,f;
double p;
bool operator<(const Node &th) const
{
return th.p>p;
}
};
Node node[1010];
int main()
{
//freopen("in.txt","r",stdin);
int m,n;
while(cin>>m>>n&&(m!=-1&&n!=-1))
{
for(int i=0; i<n; i++)
{
cin>>node[i].j>>node[i].f;
node[i].p=(double)node[i].f/node[i].j;
}
sort(node,node+n);
double sum=0;
for(int i=0; i<n; i++)
{
if(m>=node[i].f)
{
m-=node[i].f;
sum+=node[i].j;
}
else
{
sum+=node[i].j*((double)m/node[i].f);
m=0;
}
if(m==0) break;
}
printf("%.3lf\n",sum);
}
return 0;
}