FatMouse' Trade
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 33442 Accepted Submission(s): 10862
Problem Description
FatMouse prepared M pounds of cat food, ready to trade with the cats guarding the warehouse containing his favorite food, JavaBean.
The warehouse has N rooms. The i-th room contains J[i] pounds of JavaBeans and requires F[i] pounds of cat food. FatMouse does not have to trade for all the JavaBeans in the room, instead, he may get J[i]* a% pounds of JavaBeans if he pays F[i]* a% pounds of cat food. Here a is a real number. Now he is assigning this homework to you: tell him the maximum amount of JavaBeans he can obtain.
The warehouse has N rooms. The i-th room contains J[i] pounds of JavaBeans and requires F[i] pounds of cat food. FatMouse does not have to trade for all the JavaBeans in the room, instead, he may get J[i]* a% pounds of JavaBeans if he pays F[i]* a% pounds of cat food. Here a is a real number. Now he is assigning this homework to you: tell him the maximum amount of JavaBeans he can obtain.
Input
The input consists of multiple test cases. Each test case begins with a line containing two non-negative integers M and N. Then N lines follow, each contains two non-negative integers J[i] and F[i] respectively. The last test case is followed by two -1's. All integers are not greater than 1000.
Output
For each test case, print in a single line a real number accurate up to 3 decimal places, which is the maximum amount of JavaBeans that FatMouse can obtain.
Sample Input
5 3 7 2 4 3 5 2 20 3 25 18 24 15 15 10 -1 -1
Sample Output
13.333 31.500
AC codes + detailed explanation:
-
# The include <iostream> // greedy
-
# The include <cstdio> // title meaning: FatMouse mice exchange their favorite food with a m g cat food and cat food like mice but in many warehouses and warehouses of each exchange rate is not the same, but the exchange rate for each J [i] g cat against F [i] food (i is the number of layers)
-
#include<cstring>
-
const
int MAX=
10001;
-
int J[MAX];
-
int F[MAX];
-
double p[MAX];
-
using
namespace
std;
-
int main()
-
{
-
int n,m,i,j;
-
double sum;
-
while(
cin>>m>>n&&(m!=
-1&&n!=
-1))
-
{
-
for(i=
1;i<=n;i++)
-
{
-
cin>>J[i]>>F[i];
-
P [I] = Double (J [I]) / F. [I]; // each exchange rates
-
}
-
sum=
0;
-
the while
(m! =
0
&& n-! =
0
)
// 0 or food is out of the loop when the cat 0
-
{
-
int k;
-
double Max=
-1;
-
for
(I =
. 1
; I <= n-; I ++)
// each selected to be a rate of the maximum number of layers (room)
-
{
-
if(p[i]>Max)
-
{
-
Max=p[i];
-
k=i;
-
}
-
}
-
IF
(mF of [K]> =
0
)
// if there is remaining cat food or just
-
{
-
= F. M- [K]; // needed subtracting cat
-
+ J = SUM [K]; // add to the food exchange
-
P [K] = 0 ; // layer against the exchange rate that is over 0 - no
-
}
-
the else
// If the cat is not enough, use the rest of the cat food all to exchange food
-
{
-
+ P = SUM [K] * m; // All food exchange
-
= m 0 ; // make the cat food is 0, the redemption is completed - out of the loop
-
}
-
}
-
the printf
(
"% .3lf \ n-"
, SUM);
// Output
-
}
-
return
0;
-
}