題目鏈接:https://ac.nowcoder.com/acm/contest/5026/B
題目描述
最近米咔買了n個蘋果和m個香蕉,他每天可以選擇喫掉一個蘋果和一個香蕉(必須都喫一個,即如果其中一種水果的數量爲0,則他不能進行這個操作),或者使用魔法將某一種水果的數量翻倍。
現在米咔想喫西瓜了,但是他的主人賽小息不讓他買新水果,除非蘋果和香蕉沒有了,即數量都是0了。
現在米咔想知道,最少用多少天他可以喫光蘋果和香蕉。
可以證明的是,一定存在一種方案可以讓米咔在若干天后喫光蘋果和香蕉。
輸入描述:
第一行一個正整數T(T≤100),代表數據組數。接下來T行每行兩個正整數n,m(n,m ≤100000)。
輸出描述:
共T行,每行一個正整數代表答案。
輸入
3
1 1
1 2
2 5
輸出
1
3
7
說明
對於第三組測試樣例(2,5),第一天令n翻倍變成(4,5),接下來連續喫三天水果變成(1,2),第五天令n翻倍變成(2,2),接下來連續喫兩天水果,在第七天時喫光蘋果和香蕉。
分析:
貪心:我們翻倍要做到既讓水果得到最大程度的補充,又不能超過max(n,m)則進行翻倍。
這裏蘋果和香蕉是等地位的。
代碼:
#include<cstdio>
#include<cstring>
#include<math.h>
#include<stdlib.h>
#include<algorithm>
using namespace std;
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int n,m;
scanf("%d%d",&n,&m);
if(n==m)
{
printf("%d\n",m);
continue;
}
if(n<m)
swap(n,m);
int sum=0;
while(m!=0)
{
if(2*m<=n)
{
sum++;
m*=2;
continue;
}
m--,n--;
sum++;
}
printf("%d\n",sum);
}
return 0;
}