商人小鑫

来源:互联网 发布:ipad版淘宝没有微淘 编辑:程序博客网 时间:2024/05/07 15:41

商人小鑫

Time Limit: 1000MS Memory limit: 65536K

题目描述

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

输入

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

输出

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

示例输入

4 21 21 32 23 4

示例输出

3

<pre name="code" class="cpp">#include <iostream>#include <cstdio>#include <cstring>using namespace std;struct node{    int ci, pi;    int ja;} pp[10000010], temp;void Qsort(node a[], int low, int high);int main(){    int n, m;    while(cin >> n >> m)    {        for(int i = 0; i < n; i++)        {            cin >> pp[i].ci >> pp[i].pi;            pp[i].ja = pp[i].pi - pp[i].ci;        }        Qsort(pp, 0, n-1);        int i = 0, num = 0;        while(m--)        {            num += pp[i++].ja;        }        cout << num << endl;    }    return 0;}void Qsort(node a[], int low, int high){    int i = low, j = high;    node key = a[i];    if(low >= high) return;    while(i < j)    {        while(i < j && a[j].ja <= key.ja) j--;        a[i] = a[j];        while(i < j && a[i].ja >= key.ja) i++;        a[j] = a[i];    }    a[i] = key;    Qsort(a, low, i-1);    Qsort(a, i+1, high);}


0 0
原创粉丝点击