牛客練習賽59 C 裝備合成(三分搜索)

題目傳送門

題目描述

牛牛有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;

    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章