Bootstrap

华为OD机试真题C卷-篇3

灰度图存储

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


 
nums1 = [int(x) for x in input().split(" ")]
nums2 = [int(x) for x in input().split(" ")]
target_position = nums2[0]*nums1[1] + nums2[1] + 1
total_sum = 0
i=3
while(True):
    if(i>=len(nums1)):
        break
    else :
        if (total_sum + nums1[i] < target_position) :
            total_sum += nums1[i]
        else :
            print(nums1[i - 1])
            break
    i+=2

 

精准核酸检测

在这里插入图片描述
在这里插入图片描述

 
n = int(input())
target = [int(x) for x in input().split(",")]
visited = [0 for x in range(n)]
matrix = []
for i in range(n):
    matrix.append([int(x) for x in input().split(",")])
 
def dfs(index) :
    visited[index] = 1
    i=0
    while(True):
        if(i>=n):
            break
        else :
            if (matrix[index][i] == 1 and visited[i]==0) :
                dfs(i) 
        i+=1
            
        
 
for i in range(len(target)):
    dfs(target[i])
 
result = 0
i=0
while(True):
    if(i>=n):
        break
    else :
        if (visited[i]==1) :
            flag = False
            for j in range(len(target)):
                if(target[j] == i):
                    flag = True
                    break
            
            if(not flag) :
                result += 1
    i+=1
print(result)

 

 

运输时间

  • m辆车要在一条不能超车的单行道行驶,距离长度为n;
  • 速度快的车追上前车后,以前车速度继续行驶;
  • 每辆车固定间隔1小时触发,如第一辆0时出发,第二辆1时出发,依次类推;
  • 求最后一辆车到达终点的花费时间;
    输入描述:
    第一行输入m,n 分别表示车辆数、终点距离,空格隔开
    1<m<20
    1<n<400
    0<s<30
    第二行开始,每行为一辆车的速度值;
    输出描述:
    最后一辆车到达终点花费的时间

示例1
输入:
2 11
3
2
输出:
5.5

示例2
输入:
3 11
3
2
4
输出:
4.5

示例3
输入:
3 20
4
5
6
输出:
3.3333

思路:

  • 在前一辆车到达终点前,后一辆车能否追上?
    • 能追上,则 t = t_前 - 1
    • 不能追上,则 t = s/v
  • 动态规划
# __author__ = "laufing"


class TransmitTime:
    def solution(self, speeds, n):
        """
        :param speeds: m辆车的速度列表
        :param n: 总距离
        :return:
        """
        m = len(speeds)
        result = 0
        for i in range(m):
            if i == 0: # 第一辆车不受影响
                result = n / speeds[i]
            elif n / speeds[i] > result - 1: # 追不上
                result = n / speeds[i]
            else: # 在一辆车到达终点前,后一辆追得上
                result -= 1
        print(result)


if __name__ == '__main__':
    transmit_time = TransmitTime()
    while True:
        try:
            m, n = list(map(int, input().strip().split()))
            speeds = []
            for i in range(m):
                speeds.append(int(input().strip()))
            transmit_time.solution(speeds, n)
        except KeyboardInterrupt:
            break

 

;