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;
}
}