天天看點

【二分答案】遊戲

Description

“Ran,今天我要在Hakase家打遊戲,不回來了。”

“Ran,Hakase新發明了遊戲,我今天住博士家。”

“Ran,Conan今天要在我家通宵打遊戲。”

終于有一天,電腦被打壞了……2333

是以Conan要前往專賣店買新的,正好專賣店正在促銷,一共有三種禮包:

豪華禮包:一個 U盤、一個滑鼠和一個機械鍵盤。

幸運禮包:一個 U盤、兩個滑鼠。

普通禮包:兩個 U盤、一個滑鼠。

賣店内準備了 a 個 U盤、b 個滑鼠和 c 個機械鍵盤。為了給顧客帶來足夠多的驚喜,店長希望相鄰兩位領禮包的顧客拿到的禮包類型都是不同的。店長想知道這些獎品最多可以發出多少份禮包。可是店長畢竟沒有Conan聰明,是以請教Conan,可是Conan要急着回去打遊戲,是以就交給你啦。

Input

輸入第一行包含一個正整數 T。

接下來T行每行包含3個正整數a, b, c,依次表示U盤、滑鼠和機械鍵盤各有多少個。

Output

輸出T行,每行一個整數,表示最多能發出多少份禮包。

思路

觀察,可以發現禮包都共同至少擁有u盤1個和滑鼠一個。

去除之後就變成了:

U盤 滑鼠 鍵盤
1
1
1

然後r初始等于a和b的最小值,l=0;

mid為最終禮包數。

然後減去mid後,某樣東西多出1個就代表它可以湊一個禮包。是以如果剩下的總和>mid,l=mid;

如果不夠或者剩下的不能使任意倆種加起來大于等于第三種,r=mid-1;

#include<cstdio>
#include<iostream>
using namespace std;
int t,a,b,c,G,la,lb,lla,llb,lg,ans,kkk;
int main(){
	scanf("%d",&t);
	while(t){
		scanf("%d%d%d",&a,&b,&c);
		int r=min(a,b),l=0;
		while(l<r){
			int mid=(l+r+1)/2,aa,bb;
			aa=a-mid;
			bb=b-mid;
			if(aa+bb+c<mid) r=mid-1;
			else{
				if(aa+bb>=mid/2&&bb+c>=mid/2&&aa+c>=mid/2) l=mid;
	  	  	    else r=mid-1;
			}
		}
		printf("%d\n",l);
		--t;
	}
}