題目描述
牛牛有x件材料a和y件材料b,用2件材料a和3件材料b可以合成一件裝備,用4件材料a和1件材料b也可以合成一件裝備。牛牛想要最大化合成的裝備的數量,於是牛牛找來了你幫忙。
輸入描述:
輸入包含t組數據
第一行一個整數t
接下來t行每行兩個整數x,y
輸出描述:
每組數據輸出一行一個整數表示答案。
示例1
輸入
5
4 8
7 6
8 10
100 4555
45465 24124
輸出
2
2
3
50
13917
題解:這題如果暴力枚舉的話是會TLE,打一下表發現極大值具有單調性,考慮三分搜索,
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1e6+100;
int a,b,t;
int main()
{
ios::sync_with_stdio(false);
cin>>t;
while(t--)
{
cin>>a>>b;
int l=0,r=min(a/2,b/3),mid,midmid;
while(r-l>10)
{
mid=(l+r)/2;midmid=(mid+r)/2;
int x1=mid+min((a-2*mid)/4,(b-3*mid));
int x2=midmid+min((a-2*midmid)/4,(b-3*midmid));
if(x1>x2)r=midmid;
else l=mid;
}
int res=0;
for(int i=l;i<=r;i++)
res=max(res,i+min((a-2*i)/4,(b-3*i)));
cout<<res<<endl;
}
}