美团2021校招笔试-编程题(通用编程试题,第1场)3. 小美的外卖节省钱计划

2020年的618不再仅仅是购物节啦,同时也是美团外卖节,小美早早就准备好了各种满减代金券,为了最大程度的“省钱”,当然是选择把这些代金券都用光啦!
这些代金券都有一个使用门槛,即满多少元的订单才可以使用。如果使用一个二元组<x,y>表示一张代金券,即需要满x元才能优惠y元,那么需要注意的是,并不是所有代金券的x都是大于等于y的,良心美团也会推出一些x<y的代金券。如果x<y,例如x=1,y=2,则购买1元商品的情况下无需付款,不会退款给用户。
请问小美如果想用完这些代金券,在保证总付款金额最小的情况下,她最多购买多少钱的外卖呢?
说明:
1.一个订单只能用一张代金券。
2.同时满足总付款金额最少,且购买的外卖价值最高,例如两个优惠完都是1元的外卖,一个原价3元另一个原价4元,则选四元的。
3.由于美团商户很多,所以对于任何一个价格我们都可以找到至少一种商品购买。

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 256M,其他语言512M

输入描述:
输入第一行仅包含一个正整数n,表示小美拥有的代金券数量。(1<=n<=50000)
接下来有n行,每行有两个整数x和y,表示一张代金券需要订单金额满x元可以使用,能够优惠y元。(1<=x<=10000,1<=y<=10000)

输出描述:
输出仅包含两个正整数,中间用空格隔开,分别表示小美购买的外卖价值和她的实际付款金额。

示例1
输入例子:
3
5 3
10 5
1 2
输出例子:
17 7

#include <iostream>
using namespace std;

int main() {
    
    
    int n;
    cin>>n;
    int sum=0,pay=0;
    for(int i=0;i<n;i++){
    
    
        int x,y;
        cin>>x>>y;
        if(x>=y){
    
    
            sum+=x;
            pay+=(x-y);
        }
        else{
    
    
            sum+=y;
        }
    }
    cout<<sum<<' '<<pay;
    return 0;
}
// 64 位输出请用 printf("%lld")

猜你喜欢

转载自blog.csdn.net/weixin_45184581/article/details/129465000