我正在嘗試解決: http://orac.amt.edu.au/cgi-bin/train/problem.pl?problemid=980&set= aio17int
該演算法超出了較大檔案的時間限制。我對python相當陌生,并且無法在線找到更有效的解決方案來檢查元素是否在串列中,然后進行相應的附加。請在不使用任何匯入的情況下幫助提高速度。謝謝你。
輸入檔案:
8 5
2 7
1 8
8 4
7 5
8 6
re = 1
bl = 1
red = [1]
blue = [2]
input_file = open("tagin.txt","r")
n, m = map(int, input_file.readline().split())
for i in range(m):
a, b = map(int, input_file.readline().split())
if a in red:
red.append(b)
re =1
elif a in blue:
blue.append(b)
bl =1
output_file = open("tagout.txt", "w")
output_file.write(str(re) " " str(bl))
output_file.close()
輸出檔案:
4 3
另外請告知堆疊溢位是否是錯誤的平臺來提出這個問題,如果是,我應該使用什么?
uj5u.com熱心網友回復:
如果我正確理解了問題,那么這應該可以實作目標:
with open('tagin.txt') as tagin:
_, M = map(int, next(tagin).split())
red = {1}
blue = {2}
for _ in range(M):
a, b = map(int, next(tagin).split())
(red if a in red else blue).add(b)
print(len(red), len(blue))
輸出:
4 3
uj5u.com熱心網友回復:
您可以改進的一些事情:
使用 a
set而不是 alist來收集團隊成員。這將提高in運營商的效率。無需跟蹤團隊的規模,因為您可以通過該
len功能獲得只收集一個團隊的成員。我們可以從 中得出另一個團隊的規模
m,它表示有多少人被標記。如果我們在其中添加 2,我們還會考慮已經標記的前兩個。減去一個團隊的規模,就得到另一個團隊的規模。
代碼:
input_file = open("tagin.txt","r")
n, m = map(int, input_file.readline().split())
red = {1} # A set, only for the red team
for i in range(m):
a, b = map(int, input_file.readline().split())
if a in red: # Better efficiency as red is now a set
red.add(b)
output_file = open("tagout.txt", "w")
# Size of blue team can be deduced from what we already know:
output_file.write(str(len(red)) " " str(m 2 - len(red)))
output_file.close()
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/434656.html
上一篇:按屬性陣列拆分文本字串
下一篇:有沒有漸近表示法的替代品?
