有多少职位?

时间:2012-04-02 19:05:33

标签: algorithm

我正在练习基于算法的编程问题。我在解决这个问题时遇到了困难。我想要解决这个问题的想法(只有小方法/提示),所以请帮助我。 这是问题陈述::

假设有两只兔子,名为兔子foo和兔子棒。最初它们都位于彼此面对的原点(中心)。

Foo知道只有两个长度为m,n的跳跃。那就是foo可以跳到他左边的m长度或者向右移动m长度或者向左移动n长度或者向他的n长度移动 只需一次尝试就可以了。

同样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

2 个答案:

答案 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(对于中心)。希望有所帮助。