此题最简单的办法那就是直接二分,因为数据量有限,我们可以对答案进行二分,每次求出一个mid后,将大于mid的红砖和蓝砖全部合成,若最后三砖数量均大于等于mid,则将左端点置为mid,否则将右端点置为mid-1
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
小美有a个红砖、b个蓝砖和c个绿砖。每x个红砖可以合成1个蓝砖,每y个蓝砖可以合成1个绿砖。砖块只能正向合成,不能反向分解。 一套砖块包含1个红砖、1个蓝砖和1个绿砖。请计算小美最多可以收集多少套砖块。
每个测试文件均包含多组测试数据。第一行输入一个整数T(1≤T≤105)代表数据组数,每组测试数据描述如下: 在一行上输入五个整数a,b,c,x,y(0≤a,b,c≤109,1≤x,y≤109),分别表示红砖、蓝砖、绿砖的数量及合成的比例。
对于每一组测试数据,在一行上输出一个整数,代表小美最多可以收集到的砖块套数。
输入
2
1 2 3 4 2
10 2 1 4 2
输出
1
2
说明
对于第一组测试数据,无法进行合成转换,故只能收集初始的一套。 对于第二组测试数据,可以把8个红砖转为2个蓝砖、把2个蓝砖转化为1个绿砖。这样每种的砖块数量分别为[2,2,2],刚好凑成2套。