第一题
数轴X上有两个点的序列A={A1,A2,…,Am}和B={B1,B2,…,Bn},A_i和B_i均为正整数,A、B已经从小到大排序,A、B一定不为空,给定一个距离R,列出同时满足如下条件的所有(Ai, Bj)数对:
- A_i <= B_j
- A_i 和B_j的距离小于等于R,但如果A_i找不到R范围内的B_j,则列出距离它最近的一个B_j当然这种情况要满足条件1,如果找不到,就抛弃A_i
输入描述:
按照人易读的格式输入一行数据,输入A和B已经排好序,A和B的大小不超过50, 正整数范围不超过65535
输出描述:
(A_i, B_j)数对序列,排列顺序满足序列中前面A_x <= A_y,前面的B_x <= B_y,因为输入的A和B已经排好序,所以实际输出结果不用特意排序,排序不是考察点。
输入:
A={1,3,5},B={2,4,6},R=1
输出:
(1,2)(3,4)(5,6)
ins = input()
splitIn = ins.split('}')
a = list(map(lambda x:int(x), splitIn[0][3:].split(',')))
b = list(map(lambda x:int(x), splitIn[1][4:].split(',')))
r = int(splitIn[2][3:])
ans = []
for i in a:
j = 0
# 保证满足条件1
while(j < len(b) and b[j] < i): j+=1
# 怕找不到 记录指针
index = j
# 开始找满足条件2的b元素值
while(j < len(b) and b[j] - i <= r):
ans.append([i, b[j]])
j += 1
if index == j and j < len(b): #说明没有找到
ans.append([i, b[index]]) # 添加最近的元素
for k,v in ans:
print("({0},{1})".format(k,v))
第二题
出差问题
考完发现好像是
leetcode1029
第三题
酒店房间号问题
最长公共子序列