求指点今晚腾讯笔试题,实在不明白哪里错了,求解答
今晚腾讯笔试,感觉有两道题都会做的,但是实在不太明白哪里错了,第一道题和第三道题吧,直接贴代码了,求指导:
给n个数,可以一次选两个不同的数字,然后问,能不能将n个数字删光,一个用例都没过。。。:
import sys def main(nums): nums.sort() left, right = 0, len(nums) - 1 while left < right: if nums[left] != nums[right]: left, right = left + 1, right - 1 else: return 'NO' return 'YES' if __name__ == '__main__': counts = int(sys.stdin.readline().strip()) sequences = list() for _ in range(counts): n = int(sys.stdin.readline().strip()) sequences.append(list(map(int, sys.stdin.readline().strip().split(' ')))) for nums in sequences: print(main(nums))
是关于丢硬币的,说我复杂度太高,不太明白,用的dfs+***,按理说应该可以的呀,a了0.3,然后那个最终给结果的,有点不太明白,求大佬给简便方法。。。:
import sys def main(n, p, q): res = dict() *** = dict() # x表示有x个硬币朝上 for x in range(p, n - q + 1): res[x] = helper(x, 0, n, ***) sums = sum(res.values()) numerator = 0 for key, value in res.items(): numerator += key * value k = 0 while True: if ((k * (1e9 + 7)) + numerator) % sums == 0: return int(((k * (1e9 + 7)) + numerator) // sums) else: k += 1 def helper(target, pos, n, ***): if (target, pos) in ***: return ***[(target, pos)] if target > n - pos or target < 0: return 0 if pos == n: return 1 if target == 0 else 0 ***[(target, pos)] = helper(target - 1, pos + 1, n, ***) + helper(target, pos + 1, n, ***) return ***[(target, pos)] if __name__ == '__main__': line = list(map(int, sys.stdin.readline().split(' '))) n, p, q = line[0], line[1], line[2] print(main(n, p, q))
求大佬指点...
#腾讯##笔试题目#