这个题的暴力思路是用两个for循环,将所有的和求出来看看哪对的和为x输出即可,肯定是TLE的。
那么如何优化呢?我们可以这么想,先固定A数组中的一个数,然后B数组倒序遍历,如果倒序遍历的过程中本一直大于x,突然遇到了小于x的情况,那么可以直接将B数组的指针固定住,因为再往后遍历也不可能出现等于x的情况,A数组的指针前移再进行比较,因为这样就从能比一开始小于x的情况要大了。
为什么能这样做呢?因为对B数组的倒序过程是在保证两者和始终大于x的情况,这时A数组的指针是指向较小的数,此时还能够大于x,就说明B数组指针指向的数太大了,需要缩小;当小于x时就说明B数组的指针已经移动到了较为合适的位置了,此时移动A数组使两者和变大即可。
n, m, x = map(int, input().split())
A = list(map(int, input().split()))
B = list(map(int, input().split()))
j = m - 1
for i in range(n):
while j >= 0 and A[i] + B[j] > x:
j -= 1
if A[i] + B[j] == x:
print(i, j)
break