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

【算法】装备合成(二分)

链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网

题目描述

牛牛有x件材料a和y件材料b,用2件材料a和3件材料b可以合成一件装备,用4件材料a和1件材料b也可以合成一件装备。牛牛想要最大化合成的装备的数量,于是牛牛找来了你帮忙。

输入描述:
输入包含t组数据
第一行一个整数t
接下来t行每行两个整数x,y
输出描述:
每组数据输出一行一个整数表示答案。
输入
5
4 8
7 6
8 10
100 4555
45465 24124
输出
2
2
3
50
13917

备注:

1<=t<=10000{1<=t<=10000}1<=t<=10000

1<=x,y<=1e9{1<=x,y<=1e9}1<=x,y<=1e9

思路

 

使用方案1合成装备的数量与合成装备的总数量关系如图所示。

设需要用方案一制造装备m件,消耗a材料(2*m)件,消耗材料b(3*m)件。

那么使用方案二制造装备数为min((x - 2 * m) / 4,(y - 3 * m) / 1)。

我们可以使用二分的方法来寻找m。

比较mid与mid + 1制造的装备总数,如果m = mid时制造的装备总数小于m = mid + 1时制造的装备总数,则mid在峰值的左侧,否则在峰值的右侧,找到峰值时,即为可以制造装备总数的最大值。

代码

#include<bits/stdc++.h>
#define int long long
using namespace std;
int x,y;

bool check(int mid)
{
    int xx1 = x - (2 * mid);
    int yy1 = y - (3 * mid);
    if(xx1 < 0) return true; 
    if(yy1 < 0) return true;
    int res1 = min(xx1 / 4, yy1 / 1);
    res1 += mid;
    
    mid ++;
    int xx2 = x - (2 * mid);
    int yy2 = y - (3 * mid);
    if(xx2 < 0) return true; 
    if(yy2 < 0) return true;
    int res2 = min(xx2 / 4, yy2 / 1);
    res2 += mid;
    
    if(res1 > res2) return true;
    else return false;
    
}

void solve()
{
    cin >> x >> y;
    int l = 0, r = 1e9;
    while(l < r)
    {
        int mid = (l + r) >> 1;
        if(check(mid)) r = mid;
        else l = mid + 1;
    }
    int xx1 = x - (2 * l);
    int yy1 = y - (3 * l);
    int res1 = min(xx1 / 4, yy1 / 1);
    cout << l + res1 << endl;
}

int32_t main()
{
    int T;
    cin >> T;
    while(T --)
        solve();
    return 0;
}


http://www.kler.cn/a/145905.html

相关文章:

  • 光谱相机在智能冰箱的应用原理与优势
  • 数据结构——栈
  • feign调用跳过HTTPS的SSL证书校验配置详解
  • 一文大白话讲清楚webpack基本使用——2——css相关loader的配置和使用
  • 整数的分离与合成
  • Docker 学习总结(85)—— docker cp 使用总结
  • 【UCAS自然语言处理作业二】训练FFN, RNN, Attention机制的语言模型,并计算测试集上的PPL
  • 电子学会C/C++编程等级考试2021年09月(三级)真题解析
  • redisserver一闪而过 redis闪退解决版本
  • 深信服超融合一体机提示:内存ECC
  • Echarts title标题配置项的使用 更改颜色 副标题
  • 常见树种(贵州省):021冬青、连香树、白辛树、香合欢、云贵鹅耳枥、肥牛树、杜英、格木、黄连木、圆果化香树、南天竹
  • 基于51单片机直流电机PWM控制设计
  • linux环境下对mysql操作
  • FilterChain攻击解析及利用
  • ATK-ESP8266 WIFI模块串口通信通用实现方案
  • mac VScode 添加PHP debug
  • 在 Ubuntu 上安装最新版的 Calibre
  • ElasticSearch之禁用交换分区
  • 数据结构 / 顺序表的遍历
  • 云匣子 FastJson反序列化RCE漏洞复现
  • 京东数据分析(京东大数据):2023年10月京东手机行业品牌销售排行榜
  • 初学vue3与ts:setup与setup()下的数据写法
  • Blender快捷键总结
  • vs2015如何远程启动程序来进行调试
  • Vue轻松入门,附带学习笔记和相关案例