Input
输入数据首先包含一个正整数C,表示有C组测试用例,每组测试用例的第一行是两个整数n和m(0<n<=1000,0<m<=1000),分别表示经费的金额和大米的种类,然后是m行数据,每行包含2个整数p和h(1<=p<=25,1<=h<=100),分别表示单价和对应大米的重量。
Output
对于每组测试数据,请输出能够购买大米的最多重量(你可以假设经费买不光所有的大米)。
每个实例的输出占一行,保留2位小数。
Sample Input
Sample Output
每个实例的输出占一行,保留2位小数。
1
7 2
3 3
4 4
2.33
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<map>
using namespace std;
double money;
int n;
struct Node{
int p;
int v;
}node[1010];
int cmp(const Node& p1,const Node &q){
return p1.p<q.p;//这里是坑点,之前几次提交p1.p<=q.p都wa了,不知道为什么
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%lf %d",&money,&n);
for(int i=1;i<=n;++i)
cin>>node[i].p>>node[i].v;
sort(node+1,node+1+n,cmp);
double sum=0;
for(int i=1;i<=n&&money>0;++i)
{
if(money>=node[i].p*node[i].v)
{
sum+=1.0*node[i].v;
money-=1.0*node[i].p*node[i].v;
}
else {
sum+=1.0*money/node[i].p;
//money-=sum*node[i].p;
break;
}
}
printf("%.2lf\n",sum);
}
}