依图笔试, 求大佬指点
第一题, 交换数组递增 10%
#笔试题目##依图科技#
''' @Author: rayenwang @LastEditTime: 2019-09-06 20:40:27 @Description: ''' N = int(input()) nums = [int(n) for n in input().split()] # N = 5 # nums = [1, 5, 2, 4, 3] result = 0 for i in range(N): if nums[i] == i + 1: continue index = nums[i] - 1 nums[i], nums[index] = nums[index], nums[i] result += 1 print(result)
第二题, 粉碎我自己 AC
''' @Author: rayenwang @LastEditTime: 2019-09-06 20:01:39 @Description: ''' def fill(height, space, index, N): pre_sum = 0 for i in range(index, N): if pre_sum + height[i] <= space: pre_sum += height[i] else: return False, i, space - pre_sum return True, i, space - pre_sum import math N, H, K = [int(n) for n in input().split()] height = [] for _ in range(N): height.append(int(input())) # N, H, K = [5, 5, 3] # height = [5, 4, 3, 2, 1] time = 0 finish, index, space = fill(height, H, 0, N) if finish: print(math.ceil((H - space) / K)) else: while index < N: wait = math.ceil((height[index] - space) / K) time += wait space = min(H, space + wait * K) finish, index, space = fill(height, space, index, N) if finish: break print(time + math.ceil((H - space) / K))第三题, 最大的K个节点之和 0%
''' @Author: rayenwang @LastEditTime: 2019-09-06 20:33:16 @Description: ''' N, K, S = [int(n) for n in input().split()] path = [[] for _ in range(N + 1)] for _ in range(N - 1): x, y = [int(n) for n in input().split()] path[x].append(y) value = [0] for _ in range(N): value.append(int(input())) result = [0 for _ in range(N + 1)] def recur(root): if not root: return [] temp = [root] for child in path[root]: temp = sorted(temp + recur(child), reverse=True)[:K] result[root] = sum(temp) return temp recur(S) for i in range(1, N + 1): print(result[i])