9.17滴滴笔试
选择有20个,大概有概率,机器学习,C代码,Python基础知识。
编程两道题
1. 一组由数字和?组成的字符串,需要猜?代表的位对应的数字并使整个string代表的数字最小,同时保证不能有前导0,且数可以被3整除。
不知道有什么思路,先找到最后一个?的位置,就是在string前面最一开始加一个0,然后遍历同时判断左右位置;然后最后在判断最后一个位置。但是只过了27%用例。。。
2. 栅栏涂色。每次选择一个区间进行涂色,并规定每个位置1号涂色p次同时2号涂色q次才可以成功,问最后有多少栅栏涂色成功。
思路:用数组存储对应位置的差,然后再一次遍历统计前缀和即可。但是最后我只过了18%的用例,原因在写到这里的时候想到了,是最后判断的时候p,q我直接用2算的。。。没时间改了。。。好无语
把最后判断2改成p和q即可。
n, p, q = map(int, input().split()) arr = [] maxi = 0 res = 0 for i in range(3): row = list(map(int, input().split())) if i == 0&nbs***bsp;i == 1: maxi = max(maxi, max(row)) arr.append(row) nums1 = [0]*(maxi+1) nums2 = [0]*(maxi+1) for j in range(n): l, r, sig = arr[0][j], arr[1][j], arr[2][j] if sig == 1: nums1[l-1] += 1 nums1[r] -= 1 else: nums2[l-1] += 1 nums2[r] -= 1 for i in range(1, len(nums1)): nums1[i] += nums1[i-1] for j in range(1, len(nums2)): nums2[j] += nums2[j-1] for k in range(max(len(nums1), len(nums2))): if nums1[k] >= 2 and nums2[k] >= 2: res += 1 print(res)