我正在练习基于算法的编程问题。我在解决这个问题时遇到了困难。我想要解决这个问题的想法(只有小方法/提示),所以请帮助我。 这是问题陈述::
假设有两只兔子,名为兔子foo和兔子棒。最初它们都位于彼此面对的原点(中心)。
同样bar也知道只有两个长度-p,q的跳跃。那就是bar可以向左跳p长度或向右跳p长度或向左跳q长度或向长度跳q长度 只需一次尝试就可以了。
现在这两只兔子的主人想把自己完全放在一点上,以便两只兔子能够在一次或多次尝试中接触到他的主人。 此外,主人将自己置于远离原点的L长度。 我们必须计算出主人可以放置多少位置。
m,n,p,q和L非常大,大到10 ^ 17。
那么如何有效地解决它。
实施例::
m = 1 n = 2
m = 4 n = 5
L = 1
答案= 3;
作为
Foo可以向右侧跳2个长度,然后向左侧移动一个长度。
Bar可以向他的rgt跳5个长度,然后向左侧移动4个长度。
到达距离原点1个单位的主人。
Foo 2长度左侧和后面一个长度右侧。 酒吧5长度左,5长度rgt到达他的主人,他位于距离原点1个长度
师父也可以将自己放在原点,因为foo和bar都可以通过两个动作联系到他的主人 所以总职位= 3。
其他例子::
m = 2 n = 4
p = 3 q = 6
L = 7
答案= 3。
m = 10 n = 12
p = 3 q = 9
答案= 5
答案 0 :(得分:5)
Foo可以到达gcd(m,n)
倍数的任何位置,只能到达gcd(p,q)
。条形码可以达到lcm(gcd(m,n),gcd(p,q))
倍数的位置,因此两者可达到的位置恰好是{{1}}的倍数。
答案 1 :(得分:1)
如果 m = LCM(HCF( a , b )和HCF( c , d )) 然后答案是= 2 * [ k / m ] + 1
基本上, A 最短距离的人可以移动HCF( a , b ),类似于人 B 强>
最小位置(最接近0) A & B 可以是LCM
的两个HCF
。 +1代表中心。您需要在两侧的 k 范围内找到LCM
的倍数。
因此,您将 k 除以 m ,并将除法的整数部分加倍(对于0的两边)并加1(对于中心)。希望有所帮助。