NC206588. 种花
描述
输入描述
第一行一个整数T(1≤T≤500),表示共有T组测试数据。每组测试数据第一行有两个整数 x,y(1≤x,y≤10^8)代表着空地的长和宽。
输出描述
输出小许种完花所需的最少时间。
示例1
输入:
2 1 5 3 3
输出:
20 12
C(clang 3.9) 解法, 执行用时: 2ms, 内存消耗: 376K, 提交时间: 2020-06-07 12:30:53
#include<stdio.h> int main() { int n,x,y,p,q,num; scanf("%d",&n); while(n--) { num=0; scanf("%d%d",&x,&y); while(x!=0&&y!=0) { if(x>y) { p=x/y; x=x%y; num+=4*p*y; } else{ p=y/x; y=y%x; num+=4*p*x; } } printf("%d\n",num); } }
C++11(clang++ 3.9) 解法, 执行用时: 3ms, 内存消耗: 456K, 提交时间: 2020-06-07 13:27:07
#include<cstdio> int main() { int t; scanf("%d",&t); while(t--) { long long x,y,s,ans=0,total=0; scanf("%lld%lld",&x,&y); if(x<y) { s=x; x=y; y=s; } while(y) { ans+=4*y*(x/y); x%=y; s=x; x=y; y=s; } printf("%lld\n",ans); } }
Python3(3.5.2) 解法, 执行用时: 42ms, 内存消耗: 3432K, 提交时间: 2020-06-07 12:37:07
def f(a,b): if a==1 or b==1: return a*b if a==0 or b==0: return 0 if a>b: return f(b,a) global s s+=a*(b//a)+f(b%a,a) return s n=int(input()) for i in range(n): s=0 a,b=map(int,input().split()) print(f(a,b)*4)
C++14(g++5.4) 解法, 执行用时: 4ms, 内存消耗: 484K, 提交时间: 2020-06-09 17:49:21
#include<iostream> using namespace std; int t; long long x,y; int main(){ cin>>t; while(t--){ cin>>x>>y; long long ans=0; while(x&&y){ if(x>y) swap(x,y); ans=ans+x*4*(y/x); y=y%x; } cout<<ans<<endl; } }