装备合成
装备合成
https://ac.nowcoder.com/acm/problem/200211
老实说,看数据没什么明显提示;
打表,找规律;知道函数满足三分条件;
#include<iostream>
#include<algorithm>
#include<queue>
#include<cstring>
#include<map>
using namespace std;
#define maxn 1000001
long long x,y;
int main()
{
long long t;
cin>>t;
while(t--)
{
cin>>x>>y;
long long lef=0,mmid,rig=min(x/2,y/3),mid;
while(rig-lef>10){//三分枚举,确定一个大致区间(最值存在的)
mid=(rig-lef)/3+lef;
mmid=rig-(rig-lef)/3;
if(mid+min((x-mid*2)/4,y-3*mid)>mmid+min((x-mmid*2)/4,y-3*mmid)) rig=mmid;
else lef=mid;
}
long long ans=0;
for(int i=lef;i<=rig;i++)
ans=max(ans,i+min((x-i*2)/4,y-3*i));
cout<<ans<<endl;
}
return 0;
}
