NC202491. 吃水果
描述
现在米咔想知道,最少用多少天他可以吃光苹果和香蕉。
可以证明的是,一定存在一种方案可以让米咔在若干天后吃光苹果和香蕉。
输入描述
第一行一个正整数T(T≤100),代表数据组数。
接下来T行每行两个正整数n,m(n,m ≤100000)。
输出描述
共T行,每行一个正整数代表答案。
示例1
输入:
3 1 1 1 2 2 5
输出:
1 3 7
说明:
对于第三组测试样例(2,5),第一天令n翻倍变成(4,5),接下来连续吃三天水果变成(1,2),第五天令n翻倍变成(2,2),接下来连续吃两天水果,在第七天时吃光苹果和香蕉。pypy3(pypy3.6.1) 解法, 执行用时: 78ms, 内存消耗: 46436K, 提交时间: 2020-04-10 20:55:15
for _ in range(int(input())): a, b = map(int, input().split()) if a > b: a, b = b, a ans = 0 while (a << 1) < b: a <<= 1 ans += 1 if a == b: ans += b else: ans += b+1 print(ans)
C++14(g++5.4) 解法, 执行用时: 2ms, 内存消耗: 504K, 提交时间: 2020-07-15 15:50:15
#include<bits/stdc++.h> using namespace std; int main(){ int t,n,m,ans=0; scanf("%d",&t); while(t--){ scanf("%d%d",&n,&m);ans=0; if(n<m)swap(n,m); while(m<n){m=m*2;ans++;} printf("%d\n",ans+n); } return 0; }
C++11(clang++ 3.9) 解法, 执行用时: 4ms, 内存消耗: 492K, 提交时间: 2020-04-11 10:33:31
#include<bits/stdc++.h> using namespace std;int n,x,y;int main(){cin>>n;for(int i=1;i<=n;i++){cin>>x>>y; int a=0;if(x>y) swap(x,y);while(x<y) a++,x<<=1;cout<<y+a<<"\n";}}