华为笔试
前两个AC了,最后一个只过了36%,不知道怎么优化
第一题
def solution(s):
res1 = s.split()[1:]
res1 = [i for i in res1 if i]
res2 = []
for subs in res1:
if len(subs) <= 8:
res2.append(subs + "0"*(8-len(subs)))
else:
while len(subs) > 8:
res2.append(subs[:8])
subs = subs[8:]
res2.append(subs + "0"*(8-len(subs)))
res2.sort()
return " ".join(res2)
s = input()
print(solution(s))
第二题
def solution(s):
if not s:
return ""
num_set = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"}
dic = {")": "(", "]": "[", "}": "{"}
while s[0] in dic.values():
s = s[1:-1]
n = len(s)
stack = []
for i in range(n):
if s[i] not in dic:
stack.append(s[i])
else:
left = dic[s[i]]
curs = ""
while stack[-1] != left:
curs += stack.pop()
stack.pop()
curnum = ""
while stack and stack[-1] in num_set:
curnum += stack.pop()
curnum = int(curnum[::-1])
curres = curs * curnum
stack += curres.split()
return "".join(stack[::-1])
s = input()
print(solution(s))
第三题
def solution(a, b, array, n, m):
if not array:
return 0
res = process(a[0], a[1], array, n, m, b[0], b[1])
return res
def process(i, j, array, n, m, aimi, aimj):
if i == aimi and j == aimj:
return 1
res = 0
if i - 1 > 0 and array[i-1][j] > array[i][j]:
res += process(i-1, j, array, n, m, aimi, aimj)
if i + 1 < n and array[i+1][j] > array[i][j]:
res += process(i+1, j, array, n, m, aimi, aimj)
if j - 1 > 0 and array[i][j-1] > array[i][j]:
res += process(i, j-1, array, n, m, aimi, aimj)
if j + 1 < m and array[i][j+1] > array[i][j]:
res += process(i, j+1, array, n, m, aimi, aimj)
return res
nm = input().split()
n, m = int(nm[0]), int(nm[1])
array = []
for i in range(n):
line = input().split()
line = list(map(int, line))
array.append(line)
ab = list(map(int, input().split()))
a = ab[:2]
b = ab[2:]
print(solution(a, b, array, n, m))
#华为##笔试题目##题解#