列表

详情


NC217128. 刀工对决

描述

为了争夺传说中的厨具永灵刀,特级厨师小当家和七星刀雷恩展开了神前刀工对决。对决总共有轮刀工测试,每轮给出两块鲷鱼肉,一块长度为,另一块长度为,厨师必须把这两份鲷鱼肉切成一样长。

已知小当家总共有两把菜刀,每把作用如下:

钢丝菜刀:若当前鲷鱼肉长度的倍数,可以切掉三分之二的鲷鱼肉,切掉的部分必须扔掉,即变为

百穴菜刀:若当前鲷鱼肉长度的倍数,可以切掉五分之二的鲷鱼肉,切掉的部分必须扔掉,即变为

小当家每使用菜刀切一刀鲷鱼肉就要花费秒,请问小当家完成轮测试的最短时间是多少。

输入描述

第一行一个正整数

接下来行,每行两个正整数,其中,

输出描述

输出小当家完成轮测试的最短时间,若小当家无法完成某一轮测试,输出

示例1

输入:

2
3 1
1 9

输出:

3

说明:

第一轮测试对a使用1次钢丝菜刀,第二轮测试对b使用2次钢丝菜刀。

示例2

输入:

2
5 3
1 3

输出:

2

说明:

第一轮测试对a使用1次百穴菜刀,第二轮测试对b使用1次钢丝菜刀。

示例3

输入:

2
2 3
1 1

输出:

-1

说明:

第一轮测试无法将这两块鲷鱼肉长度切成一样。

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++(clang++11) 解法, 执行用时: 32ms, 内存消耗: 2232K, 提交时间: 2021-03-28 22:20:16

#include <bits/stdc++.h>
using namespace std;
int n,a,b,ans;
signed main()
{
	int flag=0;
	scanf("%d",&n);
	while(n--){
		int a3=0,b3=0,a5=0,b5=0;
		scanf("%d%d",&a,&b);
		while(a%3==0)a/=3,a3++;
		while(a%5==0)a/=5,a5++;
		while(b%3==0)b/=3,b3++;
		while(b%5==0)b/=5,b5++;
		if(a!=b)flag=1;
		ans+=abs(a3+a5-b3-b5)+abs(a5-b5);
	}
	if(flag)cout<<"-1";
	else
		cout << ans;
}

上一题