1. 程式人生 > >【51Nod】1429 巧克力 (假·五級演算法題) 瞎搞

【51Nod】1429 巧克力 (假·五級演算法題) 瞎搞

不知不覺就過了

C++ 15 ms 1916 KB Accepted 2017/10/27 11:42:58 80 #10 ms 1916 KB Accepted   #20 ms 1916 KB Accepted   #30 ms 1912 KB Accepted   #40 ms 1916 KB Accepted   #50 ms 1916 KB Accepted   #60 ms 1916 KB Accepted   #70 ms 1916 KB Accepted   #815 ms 1916 KB Accepted   #90 ms 1916 KB Accepted
   #100 ms 1916 KB Accepted   #110 ms 1916 KB Accepted     #120 ms 1912 KB Accepted   #130 ms 1916 KB Accepted   #140 ms 1916 KB Accepted   #150 ms 1916 KB Accepted   #160 ms 1916 KB Accepted   #170 ms 1916 KB Accepted   #180 ms 1916 KB Accepted   #190 ms 1916 KB Accepted   #200 ms 1916 KB Accepted 
  #210 ms 1916 KB Accepted  
#include <cstdio>
#include <algorithm>
using namespace std;

long long a,b,c,d,A2,B2,A3,B3,a2,a3,b2,b3,c2,c3,d2,d3,ans;

void devide(long long &x,long long &two,long long &tre)
{
	while (!(x&1)) x>>=1,two++;
	while (x%3==0) x/=3,tre++;
	return;
}

int main(void)
{
	scanf("%lld%lld%lld%lld",&a,&b,&c,&d);
	devide(a,a2,a3),devide(b,b2,b3),devide(c,c2,c3),devide(d,d2,d3);
	if (a*b!=c*d)
	{
		printf("-1\n");
		return 0;
	}
	A2=a2+b2,A3=a3+b3,B2=c2+d2,B3=c3+d3;
	long long tmp=min(B3,A3);
	B3-=tmp,A3-=tmp;
	if (A3>0) A2+=A3,ans+=A3;
	if (B3>0) B2+=B3,ans+=B3;
	tmp=min(A2,B2);
	A2-=tmp,B2-=tmp;
	if (A2>0) ans+=A2,A2=0;
	if (B2>0) ans+=B2,B2=0;
	printf("%lld\n",ans);
	return 0;
}