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