当前位置: 首页 > 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.dtcms.com/a/293228.html

相关文章:

  • Elasticsearch Java 8.x 的聚合 API 及子聚合的用法
  • (Python)类的练习与巩固(图书管理系统)(类与方法的基础教程)(if条件扩展)(动态类型)(Python教程)
  • RDLC报表纵向合并单元格
  • 适配者模式
  • git reset HEAD的实用指南
  • PyQt5—QLabel 学习笔记
  • Python通关秘籍(四)数据结构——列表
  • 发票识别在费控系统应用剖析
  • Linux 重定向和缓冲区
  • 1.两数之和
  • CDN 优化前端打包体积
  • Unity里的加力
  • Linux研学-MySQL安装
  • IP43半加固笔记本L156H
  • Embassy实战:Rust嵌入式异步开发指南
  • 使用docker(ubuntu)搭建web环境(php,apahce2)
  • Vue 3 响应式系统中的 effectScope、watchEffect、effect 和 watch 详解
  • 解锁 Rust 语言:交叉编译与安全防护全攻略
  • Redis - ZSet数据结构与滑动窗口应用
  • 在 WebSocket 中使用 @Autowired 时遇到空指针异常
  • 二、Vue常用指令:v-bind、v-model、v-on
  • 【Python】常见模块及其用法
  • MSTP技术
  • 建造者模式:构建复杂对象的优雅方式
  • c练习-c基础
  • Pulsar存储计算分离架构设计之Broker无状态
  • vscode目录,右键菜单加入用VSCode打开文件和文件夹(快速解决)(含删除)(脚本)
  • gma视角的历史地图集3:自夏至宋3000年5座洛阳城
  • 【锁】MySQL中有哪几种锁?
  • opencv-图像处理