题目有个条件没注意啊
可以直接枚举
比赛时 错了不少细节
两个代码 第二个是yzy的太神了!!
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
int a,b,c;
int T;
int ok(int k)
{
int Ct=k;
int A=a-k,B=b-k;
int tmp=B/3;
int At=tmp,Bt=tmp;
k+=1;
if(B-At-Bt*2>=1&&A-At*2-Bt>=2&&k>=1) At++,k--;
if(B-At-Bt*2>=1&&A-At*2-Bt>=2&&k>=1) At++,k--;
int tt=min(min((A-At*2-Bt)/3,Bt),k/3);
At+=tt*2;
Bt-=tt;
if(A-At*2-Bt>=1&&B-Bt*2-At>=2) Bt++;
// cout<<At<<' '<<Bt<<' '<<Ct<<' '<<At+Bt+Ct<<endl;
if(At+Bt+1<Ct) return -1;
return At+Bt+Ct;
}
int main()
{
// freopen("a.in","r",stdin);
// freopen("a.out","w",stdout);
cin>>T;
while(T--)
{
scanf("%d %d %d",&a,&b,&c);
int ans=-1;
for(int i=0;i<=c;i++)
ans=max(ok(i),ans);//,cout<<i<<' '<<ans<<endl;
printf("%d\n",ans);
}
return 0;
}
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<vector>
#include<cstdio>
#include<queue>
#include<ctime>
#include<cmath>
#include<set>
#include<map>
#define LL long long
using namespace std;
int a,b,c;
bool jud(int x)
{
int t[5],w=x;
t[0]=a-x,t[1]=b-x,t[2]=c;
for(int i=0;i<3;i++)
w-=min(t[i],(x+1)/2);
return w<=0;
}
int main()
{
freopen("a.in","r",stdin);
freopen("ac.out","w",stdout) ;
int T;
scanf("%d",&T);
while(T--)
{
scanf("%d%d%d",&a,&b,&c);
int L=0,R=min(a,b),ans=0;
while(L<=R)
{
int mid=L+R>>1;
if(jud(mid)) ans=mid,L=mid+1;
else R=mid-1;
}
printf("%d\n",ans);
}
return 0;
}