题目1433:FatMouse 题目21

来源:互联网 发布:golang go的用法 编辑:程序博客网 时间:2024/05/22 11:45

第一遍Runtime Error,这种错误一般是数组越界造成的,检查发现while循环条件不对,需要考虑food足够多的的情况即while(N>0&&i<M)

题目描述:

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 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.

输出:

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.

样例输入:
5 37 24 35 220 325 1824 1515 10-1 -1
样例输出:
13.33331.500
#include <stdio.h>#include <iostream>#include <string>#include <string.h>#include <algorithm>#include <cmath>using namespace std;struct Exhange {int j,f;float ra;Exhange(){j=0;f=0;ra=0;}};bool cmp(const Exhange &a,const Exhange &b){return a.ra>b.ra;}int main(){int N,M;cin>>N>>M;while(!(N==-1&&M==-1)){int i=0;Exhange *a=new Exhange[M];for (i=0;i<M;i++){cin>>a[i].j>>a[i].f;a[i].ra=(float)a[i].j/(float)a[i].f;}sort(a,a+M,cmp);float fOut=0;i=0;while(N>0&&i<M){if (N-a[i].f>=0){fOut+=a[i].j;N-=a[i].f;i++;}else{fOut=fOut+(float)N*a[i].ra;N-=a[i].f;}printf("%.3f\n",fOut);cin>>N>>M;}return 0; }
0 0
原创粉丝点击