2020阿里笔试 3月25号

#阿里笔试2020#
第一题AC
动态规划 dp[i][j]表示在以arr[i][j]为结尾情况下的最小邻差绝对值求和结果
n = int(input().strip())
arr = [[0]*n for _ in range(3)]
for i in range(3):
    arr[i] = list(map(int, input().split()))
dp = [[0]*n for _ in range(3)]
dp[0][0], dp[1][0], dp[2][0] = 0, 0, 0
for lie in range(1,n):
    for hang in range(3):
        dp[hang][lie] = dp[0][lie - 1] + abs(arr[hang][lie] - arr[0][lie - 1])
        dp[hang][lie] = min(dp[hang][lie], dp[1][lie - 1] + abs(arr[hang][lie] - arr[1][lie - 1]))
        dp[hang][lie] = min(dp[hang][lie], dp[2][lie - 1] + abs(arr[hang][lie] - arr[2][lie - 1]))
#print(dp)
print(min(dp[0][-1], dp[1][-1], dp[2][-1]))
#print(arr)
'''#示例输入
5
5 9 5 4 4
4 7 4 10 3
2 10 9 2 3
'''
输出:
5


第二题时间不够了,考试结束10分钟才搞出来
步骤:
1、按行复原矩阵
2、按列复原矩阵
3、再按行复原矩阵
n,m,q = list(map(int,input().split()))
A = [[0]*m for _ in range(n)]
Q = [[0]*2 for _ in range(q)]
for i in range(n):
    A[i] = list(map(int, input().split()))
for i in range(q):
    Q[i] = list(map(int, input().split()))
for hang in range(n):
    flag = 0
    i , i_val, j, j_val =-1,0,-1,0
    for lie in range(m):
        if A[hang][lie]:
            flag += 1
            if i==-1:
                i, i_val = lie, A[hang][lie]
            elif j==-1:
                j, j_val = lie, A[hang][lie]
    if flag>=2:
        for lie in range(m):
            A[hang][lie] = A[hang][i] + int((j_val-i_val)/(j-i)*(lie - i))
#print(A)
for lie in range(m):
    flag = 0
    i , i_val, j, j_val =-1,0,-1,0
    for hang in range(n):
        if A[hang][lie]:
            flag += 1
            if i==-1:
                i, i_val = lie, A[hang][lie]
            elif j==-1:
                j, j_val = lie, A[hang][lie]
    if flag>=2:
        for hang in range(n):
            A[hang][lie] = A[hang][i] + int((j_val-i_val)/(j-i)*(lie - i))
#print(A)
for hang in range(n):
    flag = 0
    i , i_val, j, j_val =-1,0,-1,0
    for lie in range(m):
        if A[hang][lie]:
            flag += 1
            if i == -1:
                i, i_val = lie, A[hang][lie]
            elif j==-1:
                j, j_val =  lie, A[hang][lie]
    if flag>=2:
        for lie in range(m):
            A[hang][lie] = A[hang][i] + int((j_val-i_val)/(j-i)*(lie - i))
#print(A)
for i in range(q):
    if A[Q[i][0]-1][Q[i][1]-1] == 0:
        print('Unkown')
    else:
        print(A[Q[i][0]-1][Q[i][1]-1])

#print(A, Q)
'''#示例输入
2 3 6
1 0 3
0 0 0
1 1
1 2
1 3
2 1
2 2
2 3
'''
输出:
1
2
3
Unkown
Unkown
Unkown

#阿里笔试2020##阿里巴巴##笔试题目#
全部评论
从拼音变量来看,楼主不仅强,还有点俏皮
3 回复 分享
发布于 2020-03-26 18:24
第二题复原矩阵,才发现我想的太简单了。还是漏掉了一种情况。 如果四个点都不在同一行或者同一列,就足够复原出整个矩阵了。例如 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 可以证明,该矩阵可以复原,且矩阵唯一,是全1矩阵。 设右上角四个元素为未知变量,可列四个线性方程,四个未知数。 可以证明方程之间是线性无关的,所以可解。 然后再用行列行或者列行列就可以复原出整个矩阵。 解四元一次线性方程组的代码很麻烦了,考试时间这么短也很难敲出来吧。 这题真的是很变态了。
点赞 回复 分享
发布于 2020-03-27 13:29
为什么不需要再继续纵扫一次啊
点赞 回复 分享
发布于 2020-03-26 16:31
啊,字符串Unknown吗, 我写成了UnKnown
点赞 回复 分享
发布于 2020-03-25 17:47
太强了,第二题我想到了做法但怎么都过不了
点赞 回复 分享
发布于 2020-03-25 17:39
太强了,太强了
点赞 回复 分享
发布于 2020-03-25 17:35

相关推荐

这算盘打的
程序员小白条:都这样的,都是潜规则,你自己说可以实习一年就行了,实习可以随便跑路的
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-10 11:27
明天又是董事长面,啥时候是个头啊
在太阳里长大的人:公司就仨人吧😂
点赞 评论 收藏
分享
07-02 22:46
门头沟学院 Java
码农索隆:hr:“管你投没投,先挂了再说”
点赞 评论 收藏
分享
评论
6
22
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务