当前位置: 首页 > 面试经验 >

米哈游笔试8.13后端题解

优质
小牛编辑
87浏览
2023-08-13

米哈游笔试8.13后端题解

欢迎点赞交流讨论

T1

先后经过三个点,求最短距离;平面可连接扩展。

模拟即可,参考代码:

m, n = list(map(int, input().split()))
x1, y1 = list(map(int, input().split()))
x2, y2 = list(map(int, input().split()))
x3, y3 = list(map(int, input().split()))

def f(a, b, l):
    return min(abs(a-b), abs(min(a, b)+l - max(a, b)))
  
print(f(x1, x2, m)+f(y1, y2, n)+f(x2, x3, m)+f(y2, y3, n))

T2

向有根树的叶添加节点,使得距离根一定范围内的节点数最大。

只需要关心叶节点和它的深度即可,注意是无向图,不要被例题图片迷惑了,参考代码:

# Python默认的最大递归深度是1000,小于本题的范围,要设置下
import sys
sys.setrecursionlimit(1000000000)

n, k = list(map(int, input().split()))
G = [[] for i in range(n)]

for _ in range(n-1):
    u, v = list(map(int, input().split()))
    G[u-1].append(v-1)
    G[v-1].append(u-1)
    
def dfs(cur, depth, parent):
    if depth>k:
        return 0
    ans = 1
    if len(G[cur])>1 or parent==-1:
        for child in G[cur]:
            if child!=parent:
                ans += dfs(child, depth+1, cur)
    else:
        ans += max(0, k-depth)
    return ans
  
print(dfs(0, 0, -1))

T3

抽卡题,规则不再赘述,玩过原的应该会熟悉些。跟实际游戏还是有点区别的,实际上89抽之前也会增大抽取概率,本题留了一手。

数据范围很小,维护一个第i抽出金的概率数组,二层循环模拟即可,最后期望就是抽数乘以概率的累加和。参考代码:

p = float(input())
tmp = [0]*181

def wai(cur, index):
    for i in range(1, 90):
        tmp[index+i] += cur*p
        cur = cur*(1-p)
    tmp[index+90]+= cur

cur = 1
for i in range(1, 90):
    tmp[i] += cur*p/2
    wai(cur*p/2, i)
    cur = cur*(1-p)
tmp[90] += cur/2
wai(cur/2, 90)
print(sum([i*tmp[i] for i in range(len(tmp))]))

个人认为整体难度很白给,没有任何难度算法和数据结构,比暑期实习的题简单多了

 类似资料: