名侦探柯南

来源:互联网 发布:雅思口语软件 编辑:程序博客网 时间:2024/04/26 11:20

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

输入:

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

         输入的第一行包括两个整数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 "iostream"        #include "stdio.h"        #include "math.h"        #include "vector"        #include "queue"        #include "memory.h"        #include "algorithm"        #include "string"        using namespace std;        #define N 100001      #define max(a,b) a>b?a:b      #define min(a,b) a<b?a:b      #define eps 1e-7      int n;      double c;      double g[N][3];             int comp(const void *a,const void *b)      {          return *((double *)b+2)>*((double *)a+2)?1:-1;      }            int main()      {          while(scanf("%d%lf",&n,&c)!=EOF)          {              int i,j;              for(i=0;i<n;i++)              {                  scanf("%lf%lf",&g[i][0],&g[i][1]);                  g[i][2]=g[i][1]/g[i][0];              }              qsort(g,n,sizeof(double)*3,comp);              double sum=0;              for(i=0;i<n;i++)              {                  if(c>=g[i][0])                  {                      c-=g[i][0];                      sum+=g[i][1];                  }                  else                  {                      sum+=g[i][1]*c/g[i][0];                      break;                  }              }              printf("%d\n",(int)(sum+0.5));          }      }  




0 0
原创粉丝点击