回归 Hackerrank 刷人工智能题,首刷遭到暴击
选了人工智能的第一道题:
在 一个 N * N (N是正奇数,大于等于3,小于100)的矩阵上,
矩阵左上角是坐标 [0,0],左下角是 [N-1,0],右上角是[0,N-1],右下角是 [N-1
,N-1],矩阵方格默认用’-'表示
公主(用字母’p’表示)可能在四角之一,机器人(用字母’m’表示)在中间,机器人可以上下左右移动,请打印出机器人救公主的移动轨迹。如果机器人救出公主,就胜利了。得分是(N*N-移动步数)/ 10。
示例输入(第一行是N,后面每行是N*N矩阵的每行具体内容,这里这个例子,矩阵的大小是3 * 3 ,开局时,公主‘p’在左下角,机器人‘m’在正中间):
3
---
-m-
p--
该例输出(先向下,再向左)
DOWN
LEFT
我提交了好几次,3胜但是得分都是0
很多人也都如此,而且都不太理解为什么?我也还在琢磨。怀疑,很可能还是没有正确理解题意,可能考虑不太周全。
第一次提交假设:公主就在四顶角之一,保持不动,机器人在正中间
也就是公主在
[0,0], [N-1,0] ,[0,N-1],或 [N-1
,N-1] 之一,保持不动,
而机器人在正中间[(N-1)/2,(N-1)/2]
但是提交结果:三胜但0分
第二次提交放宽假设:公主就在四顶角之一,保持不动,机器人在任意非边界位置
因为考虑到机器人所在的 middle 这个词有歧义,也许不是正中间,而是任意非边界位置。
但是提交结果:三胜但0分
第三次提交再放宽假设:公主,机器人开局可以在任意位置,公主保持不动,还允许公主和机器人开局重合
因为考虑到 公主所在的 corner 这个词也有歧义,也许不是四个顶角,而是任意位置
但是提交结果:三胜但0分
每局的得分理论下限是多少呢
假设公主和机器人开局位置随机,公主保持不动,那么,最坏的情况,公主和机器人在对角线的顶角上,所以每个方向需要移动N-1步,两个方向一共需要移动(N-1) * 2 步骤,所以,最差得分是
(N*N - (N-1) * 2)/ 10
当N=3时,无论如何,每局只能得0分
因为3*3 < 10,所以,只能得0分
所以来算一下,理论上,3局的最大可能得分
实际上,评论区对于这道题目,舆论哗然,官方也没有解释,也没有公布他们的测试用例。
所以,让我们来估算,在理论上,三局的理论最大可能得分。
让我们假定公主是保持不动的,那么每一局的得分是:
(N*N-移动步数)/ 10
那么,N的最大值是99,在允许初始位置重合的情况下,移动步数最小是0,所以一局的最大可能得分是
(99*99-0)/ 10 = 980.1
所以,3局最大理论得分是,2940.3
980.1*3=2940.3
实际上,在排行榜上,第一名得了 2922.10 分,接近理论上限,第二名得了 80.50 分,第三名得了 40.30 分,下面梯队得了 27.80 分,而广大其他群众,大部分都是3胜0分。
3胜0分?
大家猜测,可能是因为测试用例只给了N=3的情况。
难道需要推翻公主位置保持不动这个假设?
就是实际的测试用例,可能公主在机器人每走一步之后,位置都是随机的?
这道题你得正分了吗?你怎么看?欢迎讨论!
祝福!