链接
https://ac.nowcoder.com/acm/contest/4743/C
题意
A A A 有 x x x 个, B B B 有 y y y 个
2 2 2 个物品 A A A 和 3 3 3 个物品 B B B 可以合成一件装备
4 4 4 个物品 A A A 和 1 1 1 个物品 B B B 可以合成一件装备
求最多可以合成多少件装备
思路
三分
设用第一种方法合成的装备为 n n n 件,那么总共合成的装备为: n + m i n ( ( x − 2 ∗ n ) / 4 , y − 3 ∗ n ) n+min((x-2*n)/4,y-3*n) n+min((x−2∗n)/4,y−3∗n)
通过打表发现这是个单峰函数
因此用三分寻找极值即可
代码
#include<bits/stdc++.h>
using namespace std;
int x,y;
int cal(int p) {
return p+min((x-2*p)/4,y-3*p);
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
int T;cin>>T;
while(T--) {
cin>>x>>y;
int l=0,r=min(x/2,y/3);
while(r-l>2) {
int mid=(r-l)/3;
if(cal(l+mid)>cal(r-mid)) r=r-mid;
else l=l+mid;
}
int ans=0;
for(int i=l;i<=r;i++) ans=max(ans,cal(i));
cout<<ans<<endl;
}
return 0;
}