Codeforces Round #279 (Div. 2) D

来源:互联网 发布:exchange2013多域名 编辑:程序博客网 时间:2024/06/10 14:51

2014/11/24

当时太饿就去吃饭了,吃完回来写的还剩一个尾巴就结束了...结束了....

感觉比C简单嘛,= =C是那种你知道了就会不知道一定不会的题目。(弱狗的可怜之处:都不知道自己有哪些不会)

就是一个模拟, s1=X*2^a*3*b   s2 = X *2^ a1*3^b1;

然后比较a,a1,b,b1 ,把它们减到相等 就好了 (3减一个的同时2 要加一个)

然后就完事了。别看代码很长,思路有了剩下的都是粘贴复制!

#include<stdio.h>#include<string.h>#include<math.h>using namespace std;int main(){__int64 a1 ,b1,a2,b2;while(~scanf("%I64d%I64d%I64d%I64d",&a1,&b1,&a2,&b2))  {__int64 s1,s2;int cnta1=0,cntb1=0,cnta2=0,cntb2=0;s1=a1*b1;s2=a2*b2;while(1){  if(s1%2==0)  {  s1/=2;  cnta1++;    }    else    {    break;    }}while(1){  if(s1%3==0)  {  cntb1++;  s1/=3;    }    else    {    break;    }}while(1){  if(s2%2==0)  {  cnta2++;  s2/=2;    }    else    {    break;    }}while(1){  if(s2%3==0)  {  cntb2++;  s2/=3;    }    else    {    break;    }}if(s1!=s2){printf("-1\n");}else {int cnt;if(cnta1 > cnta2){if(cntb1 > cntb2){cnta1-=cnta2;cntb1-=cntb2;            cnta2 = cntb2 =0;    cnt = cnta1+cntb1*2;}else{cnta1 -= cnta2;cntb2 -= cntb1;cnta2 = 0;cntb1 = 0;cnt =cntb2;}}else{if(cntb1 > cntb2){cntb1-=cntb2;cnta2-=cnta1;cnta1=0;cntb2=0;cnt =cntb1+cnta2;}else{cntb2-=cntb1;cnta2-=cnta1;cntb1=0;cnta1=0;cnt=cntb2+cnta2;}}cnt = cntb1+cntb2;while(cntb1){if(a1%3==0){a1/=3;a1*=2;                cnta1++;cntb1--;}else {break;}}while(cntb1){if(b1%3==0){b1/=3;b1*=2;cnta1++;cntb1--;}else {break;}}while(cntb2){if(a2%3==0){a2/=3;a2*=2;cnta2++;cntb2--;}else {break;}}while(cntb2){if(b2%3==0){b2/=3;b2*=2;cnta2++;cntb2--;}else {break;}}if(cnta1 > cnta2){cnta1-=cnta2;    cnta2 = 0;}else {cnta2-=cnta1;cnta1 = 0;}cnt+=cnta1+cnta2;while(cnta1){if(a1%2==0){a1/=2;cnta1--;}else {break;}}while(cnta1){if(b1%2==0){b1/=2;cnta1--;}else {break;}}while(cnta2){if(a2%2==0){a2/=2;cnta2--;}else{break;}}while(cnta2){if(b2%2==0){b2/=2;cnta2--;}else{break;}}printf("%d\n",cnt);printf("%I64d %I64d\n",a1,b1);printf("%I64d %I64d\n",a2,b2);}  }return 0;}


0 0
原创粉丝点击