题目:
给定三个整数数组
A = [A1, A2, ... AN],
B = [B1, B2, ... BN],
C = [C1, C2, ... CN],
请你统计有多少个三元组(i, j, k) 满足:
1 <= i, j, k <= N
Ai < Bj < Ck
输入格式
第一行包含一个整数N。
第二行包含N个整数A1, A2, ... AN。
第三行包含N个整数B1, B2, ... BN。
第四行包含N个整数C1, C2, ... CN。
对于30%的数据,1 <= N <= 100
对于60%的数据,1 <= N <= 1000
对于100%的数据,1 <= N <= 100000 0 <= Ai, Bi, Ci <= 100000
输出格式
一个整数表示答案
样例输入
3
1 1 1
2 2 2
3 3 3
样例输出
27
分析:
这个题目读着很绕口,其实就是寻找:对B中任意一个元素b,A中的任一元素a,C中的任一元素c,比b小的a的个数和比b大的c的个数的乘积。
实现这一逻辑的最快方法就是:通过python自带的二分函数库bisect,用里面的bisect_left与bisect_right分别获得对应的a的个数和c的个数。
程序:
import bisect
N = int(input('请输入整数N:'))
a = sorted(list(map(int,(input('请输入第一行数:').split(',')))))
b = sorted(list(map(int,(input('请输入第二行数:').split(',')))))
c = sorted(list(map(int,(input('请输入第三行数:').split(',')))))
count = 0
for i in range(N):
x = bisect.bisect_left(a,b[i])
y = N-bisect.bisect_right(c,b[i])
count += x*y
print(count)