列表

详情


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

上一题