最近,我开始解决在线法官的问题。我被困在this question in SPOJ中:
我尝试模拟,但是超过了时间限制。有数学方程式吗?
最佳答案
是的,有一个数学解决方案可以解决此问题。
首先让我从一些如何解决此类问题的技巧开始,然后再为实际解决方案提供一些技巧。我不会完全完成它,因此仍然存在一些挑战。
那么:如何解决此类问题?您所做的实际上是一个良好的开端。编写一个模拟并在一些小情况下运行它。那里的仿真应该相当快。现在您有了更多的值(value)。将它们写下来,然后开始凝视它们。如果K = x1和N = y1,则结果为z1,并且有更多这样的对。尝试找出一些公式。专注于对x,y或z具有固定值的三元组。他们有什么共同点?等等。你凝视着,通常一段时间后你会得到一个好主意:)
现在:有关此特定问题的一些技巧。对混洗进行一次迭代,并记下每张卡的去向。例如,卡1进入位置3,卡3进入位置2,依此类推。请注意,某些链将以这种方式形成-例如,在示例n = 6,k = 3中,我们具有长度为6的链:1-> 3-> 2-> 6-> 4-> 5-> 5-> 1 。现在计算所有链的长度(每张卡将完全属于一个链),并尝试找出答案如何取决于这些长度。
希望这足以帮助您解决问题。
编辑:看看模拟即使是单个迭代的约束可能也很慢。如果是这样,在完成第二步中的建议后,尝试计算链的长度,而不必实际模拟一次随机播放
关于algorithm - SPOJ :Card Shuffling,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9663079/