V1-1:
import sys data = sys.stdin.readlines() n,m,q = map(int, data.pop(0).split()) C = [] for i in range(n): temp = data[i].split() temp = [temp[-1]] + temp + [temp[0]] temp = list(map(int, temp)) if i == 0: C.append(temp) elif i == n-1: C.insert(0,temp) i+=1 C.insert(i,temp) table = {} for i in range(1,n+1): for j in range(1,m+1): table[C[i][j]] = " ".join(map(str, sorted([C[i-1][j],C[i][j-1],C[i+1][j], C[i][j+1]]))) sys.stdout.write("\n".join(table[int(data[n+i])] for i in range(q))+"\n")
V1-2:
import sys
data = sys.stdin.readlines()
n,m,q = map(int, data.pop(0).split())
C = []
for i in range(n):
temp = data[i].split()
temp = [temp[-1]] + temp + [temp[0]]
temp = list(map(int, temp))
if i == 0:
C.append(temp)
elif i == n-1:
C.insert(0,temp)
i+=1
C.insert(i,temp)
for k in range(q):
x = int(data[n+k])
flag = 0
for i in range(1,n+1):
for j in range(1,m+1):
if C[i][j] == x:
flag = 1
print(" ".join(map(str, sorted([C[i-1][j],C[i][j-1],C[i+1][j], C[i][j+1]]))))
break
if flag:
break
這看起來是會吃 TLE 的解?
挺多陣列的創建、插入的操作,這樣開銷很大的,可以的話盡量找一個不需要大量插入元素的作法
這題的陣列也不小
--
python 解這題有一個優勢, 可以使用「負索引」,不會報錯,這會指向從右往左數過來第 n 個元素
arr = [12, 35, 56, 23, 98] |
這樣寫的會輸出最後一個元素: 98
也可以試試 -2, -3 或其他數字,當然,這個數字不能超過陣列長度,否則就會 IndexError
這樣就可以輕鬆的處理坐在最左邊和最上面的學生了,不用刻意在陣列最前面 insert 最後一個元素
--
其他的部分,我的思路和你大同小異
我的答案: gist
這看起來是會吃 TLE 的解?
挺多陣列的創建、插入的操作,這樣開銷很大的,可以的話盡量找一個不需要大量插入元素的作法
這題的陣列也不小
--
python 解這題有一個優勢, 可以使用「負索引」,不會報錯,這會指向從右往左數過來第 n 個元素
arr = [12, 35, 56, 23, 98]
print(arr[-1])
這樣寫的會輸出最後一個元素: 98
也可以試試 -2, -3 或其他數字,當然,這個數字不能超過陣列長度,否則就會 IndexError
這樣就可以輕鬆的處理坐在最左邊和最上面的學生了,不用刻意在陣列最前面 insert 最後一個元素
--
其他的部分,我的思路和你大同小異
我的答案: gist
謝謝你,原來是自己想得太麻煩