P1102 A-B 数对 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
解法一:
n, c = map(int,input().split()) data = list(map(int,input().split())) data.sort() maxx = max(data) sum = 0 l = [0 for _ in range(maxx+1)] for i in data: l[i] += 1 for b in range(1, maxx+1): if b+c <= maxx and l[b] != 0: num = l[b+c] * l[b] sum += num print(sum)
一开始用的列表,但是有一个案例无法通过,现在就改成用字典了。
n, c = map(int,input().split()) data = list(map(int,input().split())) sum = 0 dict = {} for i in data: if i not in dict.keys(): dict[i] = 1 else: dict[i] += 1 for i in data: if i+c in dict.keys(): sum += dict[i+c] print(sum)
解法二:
学习bisect库,这个是python的内置库,蓝桥杯应该可以直接用的吧。
Python3二分查找库函数bisect(), bisect_left()和bisect_right()介绍-CSDN博客