老实说,看数据没什么明显提示;
打表,找规律;知道函数满足三分条件;
#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; }