购物
时间:2021-08-26
本文章向大家介绍购物,主要包括购物使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
题目大意
有 \(n\) 件商品,每一件商品价格为 \(P_i\) 个单位。
现在你手中共有 \(m\) 个单位的现金,以及 \(k\) 张优惠券。
你可以在购买某件商品时,使用至多一张优惠券,若如此做,该商品的价格会下降至 \(Q_i\)。
请问你至多能购买多少件商品。
解题思路
考虑贪心,先不考虑有没有优惠卷的情况肯定是从小到大买,这样一定会买的最多的。
按照这个思想,每一次买的时候就找最小的。
有两种情况:
- 使用了优惠券之后获得了一个最小值。
- 没有使用优惠券的最小值。
分别对 \(p\) 和 \(q\) 进行排序。
每次找最小的。
还要将用来优惠券的那些东西按照 \(p_i − q_i\) 放到堆里面,为以后撤销优惠券使用。
这就是反悔贪心。
AC CODE
#include <cstdio>
#include <queue>
#include <algorithm>
using namespace std;
#define int long long
const int maxn = 1e6 + 5;
struct node
{
int p, q;
bool operator < (const node& rhs) const
{
return p - q > rhs.p - rhs.q;
}
} a[maxn];
int n, k, ans;
long long m;
priority_queue<node> Q;
bool cmp(node a, node b)
{
if(a.q != b.q)
return a.q < b.q;
return a.p < b.p;
}
bool CMP(node a, node b)
{
return a.p < b.p;
}
signed main()
{
scanf("%lld%lld%lld", &n, &k, &m);
for (int i = 1; i <= n; i++)
scanf("%lld%lld", &a[i].p, &a[i].q);
sort(a + 1, a + n + 1, cmp);
for (int i = 1; i <= k; i++)
{
m -= a[i].q;
Q.push(a[i]);
if (m < 0)
{
printf("%lld\n", i - 1);
return 0;
}
}
ans = k;
sort(a + k + 1, a + n + 1, CMP);
for (int i = k + 1; i <= n; i++)
{
int tp = Q.top().p, tq = Q.top().q;
if (a[i].p - a[i].q > tp - tq && a[i].q + tp - tq <= m)
{
m -= (a[i].q + tp - tq);
ans++, Q.pop(), Q.push(a[i]);
}
else if (a[i].p <= m)
ans++, m -= a[i].p;
}
printf("%lld\n", ans);
return 0;
}
本文来自博客园,作者:蒟蒻orz,转载请注明原文链接:https://www.cnblogs.com/orzz/p/15191687.html
原文地址:https://www.cnblogs.com/orzz/p/15191687.html
- “奇幻熊”(APT28)组织最新攻击
- GDB调试CVE-2018-5711 PHP-GD拒绝服务漏洞
- 高效与争议并存:大规模自动化渗透工具AutoSploit
- Android应用测试速查表
- ADB配置提权漏洞(CVE-2017-13212)原理与利用分析
- Fuzz自动化Bypass软WAF姿势
- Web黑盒渗透思路之猜想
- ZZCMS v8.2 最新版SQL注入漏洞
- 一款轻量级Web漏洞教学演示系统(DSVW)
- 使用Burpsuite代理和pypcap抓包进行抢红包的尝试
- 基于WAVSEP的靶场搭建指南
- 【干货】大数据量下,58同城mysql实践!
- 如何预先处理电影评论数据以进行情感分析
- 如何在Python中从零开始实现随机森林
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法