Codeforces1538G Gift Set (三分)
题目链接: Gift Set
大致题意
你有x个红气球, y个蓝气球.
每次可以选择 ①: a个红气球, b个蓝气球 或 ②: b个红气球, a个蓝气球 分成一组.
问: 最多能分多少组.
解题思路
三分
首先我们的分组类型实际上只有两种. 如果数据范围小一些, 在1E7左右的范围, 我们可以暴力枚举一种情况, 然后计算出另外一种情况能凑出多少组.
简化版例题: Codeforces519C A and B and Team Training
但是本题的数据范围有1E9, 我们需要采取一种更快速的方法.
我们考虑暴力情况的本质是: 假设我们枚举情况①, 我们在能保证凑出num个情况①的前提下, 看看还能凑出多少情况②, 两者加和作为当前最优解.
但这一过程实际上是符合三分性质的, 我们不妨三分情况①的组数. 已知一定会有一个取值num, 使得我们凑出num组情况①, 余下的x, y去凑情况②是最优解. 那如果我们凑少了, 或者凑多了, 一定结果比最优解要小. 我们把结果抽象画成函数的形式, 应当是个二次函数, 我们要做的, 相当于在二次函数中找最大值.故我们可以用三分来求解.
AC代码
#include <bits/stdc++.h>
#define rep(i, n) for (int i = 1; i <= (n); ++i)
using namespace std;
typedef long long ll;
const double eps = 1E-6;
ll x, y, a, b;
double fact(double num) { //假设我们凑出num组情况① (一定能凑出的!)double lx = x - num * a, ly = y - num * b;double can = min(lx / b, ly / a);return num + can;
}
int main()
{int t; cin >> t;while (t--) {cin >> x >> y >> a >> b;double l = 0, r = min(x / a, y / b); //情况①的取值上界不能过高.while (r - l > eps) {double mid = (l + r) / 2;double midl = mid - eps, midr = mid + eps; //任何一种浮点数三分的形式都可以.if (fact(midr) > fact(midl)) l = midr;else r = midl;}ll res = 0;for (ll i = max<ll>(0, l - 5); i <= l + 5; ++i) { //为了扩大结果范围, 实际上-1 +1也能ACif (x >= i * a and y >= i * b) { //能凑出i组情况①, 我们再去找情况②ll lx = x - i * a, ly = y - i * b;ll now = min(lx / b, ly / a);res = max(res, i + now);}}printf("%lld\n", res);}return 0;
}
时隔多年, 我终于能写出这个题的题解了QAQ.
END
Codeforces1538G Gift Set (三分)相关推荐
- CodeForces - 1538G Gift Set(二分)
题目链接:点击查看 题目大意:给出 a,b,x,ya,b,x,ya,b,x,y,分别表示有 aaa 个蓝色糖果和 bbb 和红色糖果,现在有两种打包方式: xxx 个蓝色糖果和 yyy 个红色糖果 y ...
- 牛客算法課 (算法入門班) 二分, 三分, 01分數規劃
目录 NC19916[CQOI2010] 撲克牌 NC116564 [NOIP2012]借教室 K-th Number 三分思路 圆覆盖问题 传送带 01分数规划 小咪买东西 [USACO 2009 ...
- 0x04.基本算法 — 二分和三分
目录 一.二分 0.二分法 1.整数域上的二分 2.实数域上的二分 二.三分 0.三分求单峰函数极值 1.P3382 [模板]三分法(秦九韶求多项式+三分) 三.二分答案转化为判定 0.经典例子 1. ...
- python刷题一亩三分地_手把手教你用python抓网页数据【一亩三分地论坛数据科学版】...
前言:. visit 1point3acres.com for more. 数据科学越来越火了,网页是数据很大的一个来源.最近很多人问怎么抓网页数据,据我所知,常见的编程语言(C++,java,pyt ...
- HDU-4454 Stealing a Cake 三分枚举
题意:给定一个点,一个圆,以及一个矩形,现在问从一个点到一个圆再到一个矩形的最短距离为多少?到达一个目标可以只挨着或者穿过它. 解法:目前只知道从一个点到圆上按照[0,PI],[PI,2*PI]的两个 ...
- hihoCoder #1142 : 三分求极值
#1142 : 三分·三分求极值 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 这一次我们就简单一点了,题目在此: 在直角坐标系中有一条抛物线y=ax^2+bx+c和一 ...
- CF 8D Two Friends (三分+二分)
转载请注明出处,谢谢http://blog.csdn.net/ACM_cxlove?viewmode=contents by---cxlove 题意 :有三个点,p0,p1,p2.有两个人ali ...
- 七分结构三分代码-直立车想节能
沉睡的小灰 2021-01-27 Wednesday ⊙ 原文链接: 直立车想节能--2020全国大学生智能车车竞赛经验记录之梦的开始 ▌黄粱一梦 如今回首,我不懂我一个通信工程的为什么要去做这个 ...
- 移动终端三分天下 何与争峰
随着移动端的崛起,具有多种应用功能的智能手机以及平板电脑也都应运而生占据了目前大部分市场!而一直处于竞争阶段的IOS和Android系统在激烈的厮杀下,本以为Windows系统的移动端已经可以退隐江湖 ...
- BZOJ1857 Scoi2010 传送带 【三分】
BZOJ1857 Scoi2010 传送带 Description 在一个2维平面上有两条传送带,每一条传送带可以看成是一条线段.两条传送带分别为线段AB和线段CD.lxhgww在AB上的移动速度为P ...
最新文章
- 4位加法器的设计代码verilog_IC设计实例解析之“流水线技术”
- 125KHz 100cm ID 读卡电路_7 个别出心裁的树莓派优质项目集锦(完整代码+电路设计资料)...
- OSPF协议介绍及配置 (下)
- 【ACM】最少乘法次数 - 树
- 【C语言】逗号运算符的使用举例
- 跟我一起学习ASP.NET 4.5 MVC4.0(四)(转)
- vim替换字符串带斜杠_vim替换命令
- megacli通过盘符定位物理盘_Megaraid 磁盘定位
- Java IO流(精简版)
- 将macOS Big Sur降级到Catalina或Mojave的方法步骤
- reboot Linux 命令使用,linux中的reboot命令的详细解释
- 《经济学通识》一、前言
- 今天距离2022年除夕还有多少天?春节放假倒计时在手机便签上提醒
- 笔记代码(各种算法实现)
- 利用opencv带你玩转人脸识别-下篇(人脸录入,数据训练,人脸识别小案例快速入门)
- 有网络时yum无法安装,报错:Loading mirror speeds from cached hostfile
- 使用pandas时间窗口函数rolling完成量化交易之移动平均线
- 西电杨宗凯调研计算机学院,校长杨宗凯到计算机学院调研指导学院建设工作
- Ubuntu系统 --火狐浏览器-- 安装 flash播放器--百度翻译发不出声音
- usb子系统 - USB总线驱动框架分析