解析:
假设我们制作第一种m件,那么第二种只能合成 min((x-2m)/4,(y-3m))
那么总的就是 m+min((x-2m)/4,(y-3m))
但是本题枚举m会tle
所以想到三分枚举m,三分法前提是一定具有单调性
引用了大佬的图
所以这是一个先增后减的图,可以求极大值满足题意。
我们直接套这个图的三分板子即可
存在lm<rm 则极大值在[lm,right] 反之在 [left,rm];
#include<bits/stdc++.h>
using namespace std;
int t,x,y;
int val(int i)
{
return i+min((x-2*i)/4,(y-3*i));
}
int main()
{
scanf("%d",&t);
while(t--)
{
scanf("%d %d",&x,&y);
int l=0,r=min(x/2,y/3);
while(r-l>10)
{
int lmid=l+(r-l)/3;
int rmid=r-(r-l)/3;
if(val(lmid)<val(rmid)) l=lmid;
else r=rmid;
}
int ans=0;
for(int i=l;i<=r;i++)
{
ans=max(ans,i+min((x-2*i)/4,(y-3*i)));
}
cout<<ans<<endl;
}
}