当前位置: 首页 > news >正文

Atcoder Beginner Contest 415 D题

题目链接
题意: 给定 NNN 个瓶子, MMM 组交换策略. 对于每组交换策略: AiBiA_i B_iAiBi , 用 AiA_iAi 个瓶子换 BiB_iBi 个瓶子, 并得到一个贴纸. 问: 最多可以获得多少个贴纸.

转换一下就是, 用 NNN 个瓶子, 进行尽可能多的交换, 输出交换次数.

题解: 每交换一次, 减少的个数为: Ai−BiA_i - B_iAiBi , 题目约束了 Ai>BiA_i > B_iAi>Bi . 考虑交换的策略顺序, 自然是先交换减少的数量越少, 剩余的就越多, 也就是更优的.
所以可以对 Ai−BiA_i - B_iAiBi​ 升序排序.

排序之后, 依次遍历处理每一个交换策略. 对于任意一个交换策略 ABA\ BA B , 设可以交换次数为 kkk. 要求交换 kkk 次之后, 剩余的瓶子小于 AAA, 存在 N−k∗(A−B)<AN - k*(A-B)<ANk(AB)<A => k>N−AA−Bk>\frac{N-A}{A-B}k>ABNA . 要求对于此次交换策略, 次数越大越优, 这个不等式求不出最大值. 考虑第 k−1k-1k1 次交换之后, 剩余的瓶子要求大于等于 AAA, 才能进行第 kkk 次交换. 存在不等式 : N−(k−1)∗(A−B)≥AN-(k-1)*(A-B)\ge AN(k1)(AB)A => k≤N−AA−B+1k \leq \frac{N-A}{A-B}+1kABNA+1 , 此时 kkk 的最大值为: kmax=⌊N−AA−B⌋+1k_{max} = \lfloor\frac{N-A}{A-B}\rfloor+1kmax=ABNA+1 . A−BA-BAB 表示每次交换之后损失的瓶子, N−AN-ANA 表示可以损失的瓶子数. 仔细想一下, 上取整就不满足要求.

AC 代码如下:

#include <bits/stdc++.h>
#define _1 first
#define _2 second
using namespace std;
typedef long long LL;
typedef pair<LL, LL> PII;
// 当减少的数量相等时, 不管先后, 总是能遍历到的. 
bool cmp(PII a, PII b) {return (a._1 - a._2) < (b._1 - b._2); 
}void slove()
{LL n, m; cin >> n >> m;vector<PII> a(m + 5);for (int i = 1; i <= m; i++) {cin >> a[i]._1 >> a[i]._2;}sort(a.begin() + 1, a.begin() + 1 + m, cmp);LL res = 0;for (int i = 1; i <= m; i++) {LL x = a[i]._1, y = a[i]._2;if (n >= x) {LL cnt = (n - x) / (x - y) + 1;  // 每个交换策略能交换的最大次数res += cnt;n -= cnt * (x - y);  // 交换之后, 剩余的瓶子数量}}cout << res << endl;
}
http://www.lryc.cn/news/596597.html

相关文章:

  • 算法笔记之堆排序
  • 2023CCPC秦皇岛 F. Mystery of Prime(线性DP)
  • Python通关秘籍(四)数据结构——列表
  • iView Table组件二次封装
  • Elasticsearch服务器开发(第2版) - 读书笔记 第一章 Elasticsearch集群入门
  • 【uboot/kernel1】启动流程,环境变量,内存,initramfs
  • 【数学建模】基础知识
  • 【Verilog】竞争、冒险
  • 本地大模型VRAM需求计算器:原理与实现详解
  • Web3介绍(Web 3.0)(一种基于区块链技术的去中心化互联网范式,旨在通过技术手段实现用户对数据的自主权、隐私保护和价值共享)
  • 浙江大学PTA程序设计C语言基础编程练习题1-5
  • 高并发场景下的缓存问题与一致性解决方案(技术方案总结)
  • Redis 初识
  • Vue项目中的AJAX请求与跨域问题解析
  • Trae安装指定版本的插件
  • 网络编程---TCP协议
  • 浏览器解码顺序xss
  • Matlab学习笔记:界面使用
  • 基础算法思想(递归篇)
  • Linux Bridge Cost
  • Java常用API(1)
  • csp基础知识——递推
  • 激光雷达-自动驾驶的“三维感知中枢“
  • postgresql导入导出数据;pg_restore: error: did not find magic string in file header
  • 学习pwn需要的基本汇编语言知识
  • 快速了解pandas库
  • Unity之C# 脚本与Unity Visual Scripting 交互
  • 嵌入式开发学习(第三阶段 Linux系统开发)
  • Model Control Protocol 使用MCP进行各种任务适配,调用工具和资源进行客户端开发
  • 基于AD7147电容触摸芯片与STC12C5A60S2单片机方案