首页 > 试题广场 >

小红的优惠券

[编程题]小红的优惠券
  • 热度指数:4354 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
\hspace{15pt}小红的购物车结算金额为 n 元,她手中有 m 张优惠券。第 j 张优惠券的规则为“满 a_j 元立减 b_j 元”,即若 n\geqq a_j,则使用该券后需支付 n-b_j 元。

\hspace{15pt}小红至多使用一张优惠券,请问最少需要支付多少元?

输入描述:
\hspace{15pt}第一行输入两个整数 n,m\left(1\leqq n\leqq 10^5;\ 1\leqq m\leqq 100\right)
\hspace{15pt}接下来 m 行,第 j 行输入两个整数 a_j,b_j\left(1\leqq b_j\leqq a_j\leqq 10^5\right),描述第 j 张优惠券。


输出描述:
\hspace{15pt}输出一个整数,表示小红使用最优策略后需支付的最少金额。
示例1

输入

100 3
300 50
200 30
50 5

输出

95

说明

仅第三张券可用,支付 100-5=95 元。
n, m = map(int, input().split())
dic = {}
for _ in range(m):
    k, v = map(int, input().split())
    if k <= n:
        dic[k] = v
if dic == {}:
    print(n)
else:
    new = sorted(dic.items(), key=lambda d: d[1], reverse=True)
    result = n - new[0][1]
    print(result)  
发表于 2025-10-04 10:51:47 回复(0)
n,m = map(int,input().split())
max_youhui = 0
for i in range(m):
    a,b = map(int,input().split())
    if n>=a and b>max_youhui:
        max_youhui = b
print(n-max_youhui)
发表于 2025-08-29 19:48:41 回复(0)
n,m = map(int,input().split())
lis_a = []
lis_b = []
lis_c = [0]
for i in range(m):
    a,b = map(int,input().split())
    lis_a.append(a)
    lis_b.append(b)
for j in range(len(lis_a)):
    if lis_a[j] <= n:
        lis_c.append(lis_b[j])
res = n - max(lis_c)
print(res)
发表于 2025-08-22 12:18:59 回复(0)
n,m = [int(i) for i in input().split()]
min_money = []
for i in range(m):
    a , b = [int(i) for i in input().split()]
    if n>=a:
        min_money.append(n-b)
    else:
        pass

print(min(min_money) if min_money else n)
发表于 2025-07-08 17:05:18 回复(0)