文章

166

粉丝

68

获赞

831

访问

51.9k

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

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. struct node{
  4. float mi;
  5. float wi;
  6. float good;
  7. node(float a,float b,float c){
  8. mi=a;
  9. wi=b;
  10. good=c;
  11. };
  12. };
  13. bool rule(node a,node b){
  14. return a.good<b.good;
  15. };
  16. int main(){
  17. float x;
  18. int n;
  19. while(cin>>x>>n){
  20. if(x<0||n<0)break;
  21. float mi,wi,good;
  22. vector<node> goods;
  23. while(n--){
  24. cin>>mi>>wi;
  25. good=wi/mi;
  26. node nd{mi,wi,good};
  27. goods.push_back(nd);
  28. }
  29. sort(goods.begin(),goods.end(),rule);
  30. float ans=0;
  31. for(int i=0;i<goods.size();i++){
  32. if(x>=goods[i].wi){
  33. x-=goods[i].wi;
  34. ans+=goods[i].mi;
  35. }else{
  36. //if的写法为什么过不完,我知道了,大于0的也是最后的一步了,应该break
  37. if(x>0){
  38. ans+=(x/goods[i].good);
  39. break;
  40. }else{
  41. break;
  42. }
  43. }
  44. }
  45. printf("%.3f\n",ans);
  46. }
  47. return 0;
  48. }

 

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发