名侦探柯南

柯南又遇到了一个棘手的案子:一个贵族的家里被盗。这个贵族的家里非常有钱,但这家主人的习惯很怪异,他将所有的金银珠宝都磨成粉装到几个分开的袋子里。由于之前并没有记录,所以主人并不知道这次被盗自己损失了多少钱。几天后,盗窃犯被抓住,但是他身上仅有一个盗窃时用的包,盗窃走的财产早已经挥霍一空。很显然,盗窃犯一定会使自己偷走的东西的总价值最大,柯南虽然断案如神,但是他却无法计算出盗窃犯到底盗走了价值多少钱的东西。你能帮帮柯南吗?
输入:

         每组测试数据可能有多组输入,对于每一组输入,

         输入的第一行包括两个整数N(1<=N<=100000),代表主人所拥有的被磨成粉的珠宝的种类数。以及C(1<=C<=10000000),代表盗窃犯盗窃时所用的包的容量。

         接下来的N行,每行包括两个数W(1<=W<=10000000) 以及V(1<=V<=10000000),分别代表一类珠宝粉的总重量,以及这类珠宝粉的总价值。

输出:

         输出盗窃犯所盗走物品的总价值。

样例输入:
2 10
4 12
8 16
样例输出:
24
提示:
若最后得到的被盗物品的总价值不是整数,请你将答案四舍五入后输出。

 

 

 

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include <algorithm>
#include <iostream>
using namespace std;
const int MAX=100010;
typedef struct Node
{
	double w;
	double v;
};
struct Node jewelry[MAX];


bool cmp(Node a,Node b)
{
	double v_unit_a=a.v/a.w;
	double v_unit_b=b.v/b.w;
	return (v_unit_a>v_unit_b);


}

int main()
{

	


	int  n;
	double c;
	double  total_value;
	while((scanf("%d%lf",&n,&c))!=EOF)
	{
		int i;
		total_value=0;
		for(i=0;i<n;i++)
		scanf("%lf%lf",&jewelry[i].w,&jewelry[i].v);
		sort(jewelry,jewelry+n,cmp);

		for(i=0;i<n;i++)
		{
			if(jewelry[i].w<c)
			{
				c=c-jewelry[i].w;
				total_value+=jewelry[i].v;
			}
			else
			{
				total_value=total_value+(int)(((1.0*c*jewelry[i].v)/jewelry[i].w)+0.5);
				break;
			}
		}
		printf("%.0lf\n",total_value);

	}
	return 0;
} 


 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值