这道题非常有意思,主要是首先每一个元素都至少包含一个鼠标与键盘,所以说去除后实际上就只是各占一个而已。对于“相邻的两个无法拿相同的礼物”实际上就是“相邻约束”,根据鸽巢原理,如果某一个超过了一半的总数,那么就至少会有两个人拿到一样的果盘。由于我们只关心能不能而不是怎么分配,所以说我们直接使用一个limit = (总数 + 1) / 2即可,在可能的情况下都不可能超过这个数,之后看看加起来数量上能不能满足即可,比起写一堆约束条件来的方便多了

#include<bits/stdc++.h>
using namespace std;
#define int long long

signed main()
{
    int T;
    
    cin>>T;
    
    while(T--)
    { 
        int a,b,c;
        
        cin>>a>>b>>c;
        
        int nn = min(a,b);
        
        int l = 0;
            
        int r = nn;
        
        int ans;
        
        while(l <= r)
        {
            int mid = l + (r - l) / 2;
            
            int aa = a - mid;
            
            int bb = b - mid;
            
            //由于相邻的不能重复
            //就是在最差的情况下至少有一个的大小占了一半
            
            int limit = (mid + 1) / 2;
            
            int aaa = min(limit,aa);
            
            int bbb = min(limit,bb);
            
            int ccc = min(limit,c);
            
            if(aaa + bbb + ccc < mid)
            {
                r = mid - 1;
            }
            else
            {
                ans = mid;
                
                l = mid + 1;
            }
        }
        
        cout<<ans<<'\n';
    }
    
    return 0;
}