正如标题所示,此问题是@NP 礼貌的近视醉酒机器人的半启发
我们的可怜机器人在原点放置在笛卡尔网格上,每分钟之后,它会在四个方向(上,下,左,右)中的一个方向上移动1个单位。
之后ñ分钟,所有对电网活化潜在的地雷,杀死任何僵尸差可能会发现自己在他们。地雷位于满足等式| y | = | x |的所有整数坐标处。
挑战
作为输入,作为输出,您将获得n,即地雷爆炸发生前的分钟数n,您必须找到机器人死亡的可能性。
输入:代表n的自然数。
输出:让僵尸死亡的概率为p / q,其中p和q是相对质数(q不能为0,但p可以)。输出p。
规则
- 您的算法不得以指数或更高的时间运行。理想情况下,它应在多项式时间内或更短的时间内运行。
- 您的算法必须能够
n
在合理的时间内处理<20的输入(如果太难的话可以调整)。 - 这是一个代码高尔夫挑战。
- 对于给定的n遍历所有可能性,绝对不会被视为答案。
测试用例
1
->0
2
->3
4
->39
6
->135
8
->7735
10
->28287
n = 6的示例计算
我们有4种可能的移动方式:U,D,R和L。可采用的路径总数为4 ^ 6或4096。有4种可能的情况沿y = x着陆:x,y = ±1; x,y =±2; x,y =±3; 或x = y =0。我们将计算出以(1,1),(2,2)和(3,3)结束的方法数量,将它们乘以4即可得出其他象限,然后相加这就是最终以(0,0)结束的方式数量。
情况1:机器人在(3,3)处结束。为了使机器人在这里结束,它必须进行3次正确的动作,以及3次向上的动作。换句话说,到达此处的总方法是重新排列序列RROUUU中的字母的方法,即6选择3 = 20。
情况2:机器人在(2,2)结束。为了使机器人在此处结束,它可以进行2次向上移动,3次向右移动和1次向左移动;或2个向右移动,3个向上移动和1个向下移动。因此,到达此处的方法总数是重新排列序列RRRLUU和UUUDRR中的字母的方法的总和,二者均为(6选择1)*(5选择2)= 60,总共有120种可能性。
情况3:机器人在(1,1)结束。为了使机器人在此处结束,可能需要执行以下操作:1个向右移动,3个向上移动和2个向下移动。在这种情况下,重新排列RUUUDD序列中字母的方式为(6选择1)*(5选择2)= 60。
1个向上移动,3个向右移动和2个向左移动。在这种情况下,按顺序URRRLL重新排列字母的方式为(6选择1)*(5选择2)= 60。
向右移动2个,向左移动1个,向上移动2个,向下移动1个。在这种情况下,重新排列序列UUDRRL中的字母的方式为(6选择1)*(5选择1)*(4选择2)= 180。
因此,最终以(1,1)结束的方式总数为300。
情况4:机器人在(0,0)结束。为了使该机器人最终能够在这里运行,它可能需要:
3个向右移动和3个向左移动。在这种情况下,重新排列序列RRLLLL中的字母的方式为(6选择3)= 20。
3个上移和3个下移。在这种情况下,重新排列序列UUUDDD中的字母的方式为(6选择3)= 20。
1个右移,1个左移,2个上移和2个下移。在这种情况下,重新排列序列RLUUDD中的字母的方式为(6选择1)*(5选择1)*(4选择2)= 180。
1个上移,1个下移,2个右移和2个左移。在这种情况下,重新排列序列RRLLUD中的字母的方式为(6选择1)*(5选择1)*(4选择2)= 180。
因此,最终以(0,0)结束的方式总数为400。
将这些情况加在一起,我们得出以| y |结尾的方法总数 = | x | 是4(20 + 120 + 300)+ 400 =2160。因此,我们的概率是2160/4096。当该分数完全减小时,它是135/256,因此我们的答案是135。