文章

15

粉丝

27

获赞

0

访问

2.3k

头像
喝饮料 题解:每毫升的单价低者先喝
P1478 云南大学机试题
发布于2024年3月31日 11:20
阅读数 132

#include <bits/stdc++.h>
using namespace std;

struct node{
	float mi;
	float wi;
	float good;
	node(float a,float b,float c){
		mi=a;
		wi=b;
		good=c;
	};
};

bool rule(node a,node b){
	return a.good<b.good;
};

int main(){
	float x;
	int n;
	while(cin>>x>>n){
		if(x<0||n<0)break;
		float mi,wi,good;
		vector<node> goods;
		while(n--){
			cin>>mi>>wi;
			good=wi/mi;
			node nd{mi,wi,good};
			goods.push_back(nd);
		}
		sort(goods.begin(),goods.end(),rule);
		float ans=0;
		for(int i=0;i<goods.size();i++){
			if(x>=goods[i].wi){
				x-=goods[i].wi;
				ans+=goods[i].mi;
			}else{
				//if的写法为什么过不完,我知道了,大于0的也是最后的一步了,应该break
				if(x>0){
					ans+=(x/goods[i].good);
					break;
				}else{
					break;
				}
			}
		}
		printf("%.3f\n",ans);
	}
	return 0;
}

 

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发