#include <iostream>
#include <cstdlib>
using namespace std;
struct node // 节点
{
int JavaBean; // 每个房间里面所拥有的 javabean 的重量
int Cat; // 所需要的猫食重量
double Value; // 每磅猫食可以获得的 javabean;
};
// 利用 qsort 对 节点按照 Value 的大小进行排序
// 编写 cmp 函数
int cmp(const void *a,const void *b)
{
if (((node*)a)->Value > (((node*)b)->Value))
{
return -1;
}
else if (((node*)a)->Value < (((node*)b)->Value))
{
return 1;
}
else
{
return 0;
}
}
int main()
{
int Mcat = 0; // 猫食的总重量
int Nrooms = 0; // 有 n 个房间
double JavaBean = 0; //
node *pointer;
// while loop
while(1)
{
cin >> Mcat >> Nrooms;
if (Mcat == -1 && Nrooms == -1) // 当 Mcat 和 Nrooms 的值都为 -1 时, 程序结束
{
break;
}
JavaBean = 0;
pointer = new node[Nrooms];
for (int i = 0; i < Nrooms; ++i)
{
cin >> pointer[i].JavaBean >> pointer[i].Cat;
pointer[i].Value = (double)pointer[i].JavaBean / (double)pointer[i].Cat;
}
// 使用快速排序对节点进行排序
qsort(pointer, Nrooms, sizeof(pointer[0]), cmp);
for (i = 0; i < Nrooms; i++)
{
if (Mcat > 0 && Mcat >= pointer[i].Cat)
{
JavaBean += (double)pointer[i].JavaBean;
}
else if (Mcat > 0 && Mcat < pointer[i].Cat)
{
JavaBean += ((double)Mcat / (double)pointer[i].Cat) * (double)pointer[i].JavaBean;
break;
}
Mcat = Mcat - pointer[i].Cat;
}
printf("%0.3lf\n", JavaBean);
}
return 0;
}