小红准备买 n 件物品,第 i 件物品的价格是 a_i 。另外,小红有 m 种优惠券,第 i 个优惠券是:买一件价格不小于 b_i 的商品时,可以减去 c_i 的价格。每件商品最多只能用一次优惠券。每种优惠券可以用多次。 小红想知道,自己买全部商品最少需要花多少钱?
第一行输入两个正整数 n,m ,代表商品数量和优惠券的种类数。 第二行输入 n 个正整数 a_i ,代表每件商品的价格。 接下来的 m 行,每行输入两个正整数 b_i,c_i ,代表第 i 种优惠券的信息。 1 ≤ n, m ≤ 200000 1≤ a_i ≤ 10^9 1≤ c_i<b_i ≤ 10^9
一个正整数,代表最终需要花的最少钱数。
3 2 4 8 6 5 1 8 5
12
考点:排序 · 贪心 · 二分
数据规模 n ≤ 200000 | 限制 3 秒 / 256MB | 标准输入输出
推荐方向:排序
先用 O(n log n) 排序把无序变有序,后续处理往往就简单了。
思路框架(排序 通法 · 非本题专属)
实现要点:在 C++ 中用 std::sort,Python 用 sorted();注意自定义比较函数的严格弱序。
复杂度:时间 O(n log n) | 空间 O(log n) ~ O(n)
该范式的通法易错点
对照本题
样例 1:输入 3 2 / 4 8 6 / 5 1 / 8 5 → 输出 12
第二件商品选择第二种优惠券,价格减到了3元;第三件商品选择第一种优惠券,价格减到了5元。总花费:4+3+5=12
解析由校招宝本地引擎整理(依据源站考点标签 / 人工判题标注 / 题面规模信号),非官方题解,仅供思路参考。
本题来源:2023年秋招-京东-技术通用岗位-第四批笔试。