首页 > 学院 > 开发设计 > 正文

商人小鑫

2019-11-10 17:37:01
字体:
来源:转载
供稿:网友

PRoblem Description

小鑫是个商人,当然商人最希望的就是多赚钱,小鑫也一样。 这天,他来到了一个遥远的国度。那里有着n件商品,对于第i件商品需要付出ci的价钱才能得到。当然,对于第i件商品,小鑫在自己心中有一个估价pi:代表着当他买下这件商品后带回他的国家可以卖出的价格。小鑫只能带回m件商品,你能帮他计算一下他最多能赚多少钱么?

Input

输入有多组,到文件结束。(注:数据有很多组,请用高效率算法)对于每一组数据。第一行是n,m。m≤n≤10000000。紧接着有n行,每一行有两个数 c ,p。第i行代表着ci,pi。ci≤pi数据都在int范围内 。  

Output

对于每组输入数据只输出一行一个数,代表小鑫能赚多少钱。

Example Input

4 21 21 32 23 4

Example Output

3下面是用两种方法做的。第一种是C语言的快排,第二种是用了C++的sort函数。一、#include<stdio.h> struct node{      int c;      int p;      int har;}size[10000001];int partition(struct node size[],int low,int high){    int key=size[low].har;    while(low<high)    {        while(low<high&&size[high].har<=key) high--;        size[low]=size[high];        while(low<high&&size[low].har>=key) low++;        size[high]=size[low];    }    size[low].har=key;    return low;}void qsort(struct node size[],int left,int right){    int x;    if(left<right)    {        x=partition(size,left,right);        qsort(size,left,x-1);        qsort(size,x+1,right);    }}int main(){    int n,m,sum,i;    while(~scanf("%d %d",&n,&m))    {        sum=0;        for(i=0;i<n;i++)        {            scanf("%d %d",&size[i].c,&size[i].p);            size[i].har=size[i].p-size[i].c;        }        qsort(size,0,n-1);        for(i=0;i<m;i++)            sum+=size[i].har;        printf("%d/n",sum);    }    return 0;}二、    #include<stdio.h>    #include<algorithm>    using namespace std;    struct node    {      int c;      int p;      int b;    }size[10000001];    int cmp(node a,node b)    {      return a.b>b.b;    }    int main()    {      int n,m,i,sum;      while(~scanf("%d%d",&n,&m))      {         sum=0;         for(i=0;i<n;i++)         {            scanf("%d%d",&size[i].c,&size[i].p);            size[i].b=size[i].p-size[i].c;         }         sort(size,size+n,cmp);         for(i=0;i<m;i++)         {           sum=sum+size[i].b;         }         printf("%d/n",sum);      }       return 0;    }
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表