拼多多 pdd 0725 笔试
第一题
def run(lines):
lines = [tuple(line) for line in lines]
lines_f = sorted(lines, key=lambda x: x[0])
lines_e = sorted(lines, key=lambda x: x[1])
dic_f, dic_e = {},{}
for line in lines:
dic_f[line] = lines_f.index(line)
dic_e[line] = lines_e.index(line)
for i,line in enumerate(lines_f):
ei = dic_e[line]
for j in range(i):
lj = lines_f[j]
if lj[0] == line[0]&nbs***bsp;lj[1] == line[1]:
return True
if ei < dic_e[lj]:
return True
return False
run(lines) 第二题 def run(lines): j,d = lines[0], lines[1] ji, di = 0, 0 jc, dc = 0, 0 ta = [] while len(j) != ji&nbs***bsp;len(d) != di: fj,fd = True,True while fj and len(j) != ji: c = j[ji] ji += 1 ci = -1 try: ci = ta.index(c) except: pass if ci != -1: jc += len(ta) - ci + 1 ta = ta[0:ci] else: ta.append(c) fj = False while fd and len(d) != di: c = d[di] di += 1 ci = -1 try: ci = ta.index(c) except: pass if ci != -1: dc += len(ta) - ci + 1 ta = ta[0:ci] else: ta.append(c) fd = False for c in ta: if c % 2 == 0: dc += 1 else: jc += 1 return jc, dc lines = [[1,2,3,4,10,5],[5,6,7,8,2]] arr = run(lines) print(arr[0], arr[1])
第三题
def run(line): a,b,c,q = line if b == 1: return 1 if c == 1: if (q - a) % b == 0: return 1 ar = set() ar.add(a) if q == a: return 1 while True: nar = set() for i in ar: nar.add(i+b) nar.add(i*c) if q in nar: return 1 if min(nar) > q: return 0 ar = nar print(run([2,3,2,10]))
第四题
def run(arr,mn):
narr = []
for i,n in enumerate(arr):
for _ in range(n):
narr.append(i)
return select(narr, 0, [],[],mn)
def select(arr, i, r,l,mn):
if i == len(arr):
ra,la = [],[]
build(r,[],ra)
build(l,[],la)
for nr in ra:
for nl in la:
mn = max(mn, nr*nl)
return mn
n = arr[i]
r.append(n)
mn = select(arr, i+1, r,l, mn)
r.remove(n)
l.append(n)
mn = select(arr, i+1, r,l, mn)
l.remove(n)
return mn
def build(arr, r,all_arr):
if 0 == len(arr):
if len(r) != 0 and r[0] != '0':
all_arr.append(int(''.join(r)))
return
for n in arr:
narr = arr[:]
narr.remove(n)
r.append(str(n))
build(narr,r,all_arr)
r.remove(str(n))
run([0,4,0,0,0,0,0,0,0],0) 