依图笔试 算法第二套笔试题, python,AC一三题

## 第一题直接模拟。。


def y1():
    n = int(sys.stdin.readline().strip())
    x = list(map(int, sys.stdin.readline().strip().split()))
    y = list(map(int, sys.stdin.readline().strip().split()))

    i, j = 0, 0
    ans = 0
    while i < len(x) and j < len(y):
        if y[j] >= x[i]:
            ans += (j - i) * x[i]
            y[j] -= x[i]
            x[i] = 0
            i += 1
        else:
            if y[j] > 0:
                ans += (j - i) * y[j]
                x[i] -= y[j]
                y[j] = 0
            j += 1
    print(ans)
## 第三题分组运算。。。
def y3():
    x = list(map(int, sys.stdin.readline().strip().split()))
    n, k = x[0], x[1]
    y = list(map(int, sys.stdin.readline().strip().split()))
    t1 = []
    t2 = []

    ans = 0
    for i, a in enumerate(y):
        if a % 3 == 0:
            ans += 1
        elif a % 3 == 1:
            t1.append(a)
        elif a % 3 == 2:
            t2.append(a)

    if len(t1) != 0 and len(t2) != 0:
        length = min(len(t1), len(t2))
        if k <= length:
            print(ans + k)
        elif k > length:
            les = max(len(t1), len(t2)) - length
            ans += length + min(les // 3, (k - length) // 2)
            print(ans)
        return

    length = max(len(t2) // 3, len(t1) // 3)
    print(ans + min(k // 2, length))

#### 第二题用floyd通过率为0。。。。
def y2():
    x = list(map(int, sys.stdin.readline().strip().split()))
    n, m, A, B = x[0], x[1], x[2], x[3]
    d = list(map(int, sys.stdin.readline().strip().split()))
    p = [[float('inf')] * (n + 1) for _ in range(n + 1)]
    path = [[-1] * (n + 1) for _ in range(n + 1)]

    for _ in range(m):
        x = list(map(int, sys.stdin.readline().strip().split()))
        a, b, t = x[0], x[1], x[2]
        p[a][b] = t

    c = [0]

    def dfs(i, j):
        k = path[i][j]
        if k == -1:
            return
        dfs(i, k)
        c[0] += d[k - 1]
        dfs(k, j)

    for k in range(1, n + 1):
        for i in range(1, n + 1):
            for j in range(1, n + 1):
                if p[i][j] >= p[i][k] + p[k][j]:
                    p[i][j] = p[i][k] + p[k][j]
                    path[i][j] = k

    dfs(A, B)
    ans = str(p[A][B]) + ' ' + str(c[0] + d[A - 1] + d[B - 1])
    print(ans)


全部评论
我也用floyd通过为0,想不通啊
点赞 回复 分享
发布于 2019-08-24 01:13
 ans += length + min(les // 3, (k - length) // 2) length = max(len(t2) // 3, len(t1) // 3)     print(ans + min(k // 2, length)) 请问楼主..这两句是什么意思呢
点赞 回复 分享
发布于 2019-08-24 14:49
请问依图a几道才算笔试通过啊?
点赞 回复 分享
发布于 2019-08-24 20:26

相关推荐

10-09 09:39
门头沟学院 C++
HHHHaos:这也太虚了,工资就一半是真的
点赞 评论 收藏
分享
挣K存W养DOG:他真的很中意你,为什么不回他
点赞 评论 收藏
分享
评论
点赞
8
分享
牛客网
牛客企业服务