描述
题解
这里我们先来分析两种操作,操作一,是每次消除一个因子
2
,操作二,是每次消除一个因子
那么我们就可以通过这个来求最后的结果,首先我们经过若干次分解,获取每个巧克力的因子,这里我们可以直接四条边分别处理最后长宽加在一起弄,也可以先求巧克力面积,当然,何乐而不为呢?先求面积会少很多代码。接着呢?我们需要格外注意,我们需要先处理因子
很好玩的一道题,有那么点贪心的意味……
代码
//#include <iostream>
//#include <cstring>
//
//using namespace std;
//
//const int MAXN = 5;
//
//int a1, b1; // A a1 b1
//int a2, b2; // B a2 b2
//int cnt_2[MAXN];
//int cnt_3[MAXN];
//
//void get_cnt(int cnt[], int &x1, int &x2, int &y1, int &y2, int div)
//{
// while (x1 % div == 0)
// {
// cnt[0]++;
// x1 /= div;
// }
// while (x2 % div == 0)
// {
// cnt[1]++;
// x2 /= div;
// }
// while (y1 % div == 0)
// {
// cnt[2]++;
// y1 /= div;
// }
// while (y2 % div == 0)
// {
// cnt[3]++;
// y2 /= div;
// }
//}
//
//int main()
//{
// cin >> a1 >> b1;
// cin >> a2 >> b2;
//
// int x_A = a1, x_B = a2, y_A = b1, y_B = b2;
//
// get_cnt(cnt_2, x_A, x_B, y_A, y_B, 2);
// get_cnt(cnt_3, x_A, x_B, y_A, y_B, 3);
//
//
// if (x_A * y_A != x_B * y_B)
// {
// cout << -1 << endl;
// }
// else
// {
// int ans = 0;
// int cnt_A_2 = cnt_2[0] + cnt_2[2];
// int cnt_B_2 = cnt_2[1] + cnt_2[3];
// int cnt_A_3 = cnt_3[0] + cnt_3[2];
// int cnt_B_3 = cnt_3[1] + cnt_3[3];
//
// int A_B_3 = 0, B_A_3 = 0, A_B_2 = 0, B_A_2 = 0;
// if (cnt_A_3 > cnt_B_3)
// {
// A_B_3 = cnt_A_3 - cnt_B_3;
// cnt_A_2 += A_B_3;
// ans += A_B_3;
// }
// else
// {
// B_A_3 = cnt_B_3 - cnt_A_3;
// cnt_B_2 += B_A_3;
// ans += B_A_3;
// }
//
// if (cnt_A_2 > cnt_B_2)
// {
// A_B_2 = cnt_A_2 - cnt_B_2;
// ans += A_B_2;
// }
// else
// {
// B_A_2 = cnt_B_2 - cnt_A_2;
// ans += B_A_2;
// }
// cout << ans << endl;
// }
//
// return 0;
//}
#include <iostream>
#include <cstring>
using namespace std;
typedef long long ll;
int a1, b1; // A a1 b1
int a2, b2; // B a2 b2
ll area_A, area_B;
int cnt_A_2, cnt_B_2;
int cnt_A_3, cnt_B_3;
void get_cnt(int &cnt_A, int & cnt_B, int div)
{
while (area_A % div == 0)
{
cnt_A++;
area_A /= div;
}
while (area_B % div == 0)
{
cnt_B++;
area_B /= div;
}
}
int main()
{
cin >> a1 >> b1;
cin >> a2 >> b2;
area_A = 1LL * a1 * b1;
area_B = 1LL * a2 * b2;
get_cnt(cnt_A_2, cnt_B_2, 2);
get_cnt(cnt_A_3, cnt_B_3, 3);
if (area_A != area_B)
{
cout << -1 << endl;
}
else
{
int ans = 0;
int A_B_3 = 0, B_A_3 = 0, A_B_2 = 0, B_A_2 = 0;
if (cnt_A_3 > cnt_B_3)
{
A_B_3 = cnt_A_3 - cnt_B_3;
cnt_A_2 += A_B_3;
ans += A_B_3;
}
else
{
B_A_3 = cnt_B_3 - cnt_A_3;
cnt_B_2 += B_A_3;
ans += B_A_3;
}
if (cnt_A_2 > cnt_B_2)
{
A_B_2 = cnt_A_2 - cnt_B_2;
ans += A_B_2;
}
else
{
B_A_2 = cnt_B_2 - cnt_A_2;
ans += B_A_2;
}
cout << ans << endl;
}
return 0;
}