#45938: 打死不會過


hansjiang1017@gmail.com (單純想出題所以在拚30%)

學校 : 不指定學校
編號 : 278037
來源 : [111.242.81.197]
最後登入時間 :
2025-05-14 20:42:17
q366. 1. 十字轟炸 -- 113學年度新北新莊高中校內資訊學科能力競賽 | From: [111.242.114.89] | 發表日期 : 2025-04-30 20:57

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

 
#45942: Re: 打死不會過


sam851015@gmail.com (多挖鼻孔有益身心健康)

學校 : 臺中市立惠文高級中學
編號 : 277705
來源 : [123.192.228.253]
最後登入時間 :
2025-05-10 17:41:09
q366. 1. 十字轟炸 -- 113學年度新北新莊高中校內資訊學科能力競賽 | From: [123.192.228.253] | 發表日期 : 2025-05-01 21:06

這看起來是會吃 TLE 的解?

挺多陣列的創建、插入的操作,這樣開銷很大的,可以的話盡量找一個不需要大量插入元素的作法

這題的陣列也不小

 

--

 

python 解這題有一個優勢, 可以使用「負索引」,不會報錯,這會指向從右往左數過來第 n 個元素

arr = [12, 35, 56, 23, 98]
print(arr[-1])

 

這樣寫的會輸出最後一個元素: 98

也可以試試 -2, -3 或其他數字,當然,這個數字不能超過陣列長度,否則就會 IndexError

 

這樣就可以輕鬆的處理坐在最左邊和最上面的學生了,不用刻意在陣列最前面 insert 最後一個元素

 

--

 

其他的部分,我的思路和你大同小異

我的答案: gist

 

 

 
#45943: Re: 打死不會過


hansjiang1017@gmail.com (單純想出題所以在拚30%)

學校 : 不指定學校
編號 : 278037
來源 : [111.242.81.197]
最後登入時間 :
2025-05-14 20:42:17
q366. 1. 十字轟炸 -- 113學年度新北新莊高中校內資訊學科能力競賽 | From: [111.242.114.89] | 發表日期 : 2025-05-01 22:10

這看起來是會吃 TLE 的解?

挺多陣列的創建、插入的操作,這樣開銷很大的,可以的話盡量找一個不需要大量插入元素的作法

這題的陣列也不小

 

--

 

python 解這題有一個優勢, 可以使用「負索引」,不會報錯,這會指向從右往左數過來第 n 個元素

arr = [12, 35, 56, 23, 98]
print(arr[-1])

 

這樣寫的會輸出最後一個元素: 98

也可以試試 -2, -3 或其他數字,當然,這個數字不能超過陣列長度,否則就會 IndexError

 

這樣就可以輕鬆的處理坐在最左邊和最上面的學生了,不用刻意在陣列最前面 insert 最後一個元素

 

--

 

其他的部分,我的思路和你大同小異

我的答案: gist

 

 

謝謝你,原來是自己想得太麻煩

 
ZeroJudge Forum