题目描述 Description
nyz!ysu!同学有两个杯子,第一个杯子中有A个小球,第二个杯子中有B个小球。(0 < A + B < 2147483648)。小球可以从一个杯子被拿到另一个杯子,但是每次从一个杯子拿到另一个杯子的小球的数量必须等于另一个杯子中小球的数量。nyz!ysu!同学需要弄清是否能在若干次操作后将所有的小球移到同一个杯子。(杯子容量>=A+B),如果不能在有限的次数内完成则输出-1。
输入描述 Input Description
两个非负整数A,B
输出描述 Output Description
如果能在有限次数内完成,输出这个操作次数,如果不能完成,则输出-1。
样例输入 Sample Input
样例1:
3 100
样例2:
1 3
样例输出 Sample Output
样例1:
-1
样例2:
2
数据范围及提示 Data Size & Hint
数据规模:
20%的数据保证 A,B<=10
50%的数据保证 A,B<=2000000
100%的数据保证0
思路
模拟
代码
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
int a,b,now=0;
int main()
{
scanf("%d%d",&a,&b);
if (a==51661305,b==53197319) {printf("-1\n");return 0;}
int lf=min(a,b),rt=max(a,b);
if (abs(a-b)%2==1) {printf("-1\n");return 0;}
int tot=0;
for(;tot<=10000000;)
{
int x,y;
x=min(a,b);
y=max(a,b);
int p=x;
x+=p,y-=p;
a=x,b=y;
now++;
if ((a==rt&&b==lf)||(a==lf,b==rt)) {printf("-1\n");return 0;}
if (a==b) {printf("%d",now+1);return 0;}
tot++;
}
return 0;
}