這題記憶體限制 64 MB 而測資最大 10 M , n <= 1000
建議避免用 tuple 來記錄可以用 row * n + col 的 int 型態來建立一個一維陣列, 會比較省記憶體
如果用 list 還是記憶體不夠, 可試試 import array
非常感謝 我等下試試
使用Array換變成TLE
這題記憶體限制 64 MB 而測資最大 10 M , n <= 1000
建議避免用 tuple 來記錄可以用 row * n + col 的 int 型態來建立一個一維陣列, 會比較省記憶體
如果用 list 還是記憶體不夠, 可試試 import array
非常感謝 我等下試試
使用Array換變成TLEdef main():from sys import stdinfrom queue import Queuefrom array import arrayn=int(stdin.readline())ans=0#Tasksst=Queue()#MapPointsmp=array("i",[10**7]*n*n)#InputMapaaa=[]for i in range(n):aaa+=list(map(int,stdin.readline().split()))a=array('i',aaa)#找到商店 並加入佇列for i in range(n):for j in range(n):if a[i*n+j]==1:st.put((i,j,1))#BFS 從商店向外擴散 不會擴散到商店 1,牆壁-1,已被擴散的區域while not(st.empty()):x,y,d=st.get()for aa,bb in (-1,0),(1,0),(0,-1),(0,1):nx=x+aany=y+bbif n>nx>=0 and n>ny>=0:#Check IndexOutRangeif a[nx*n+ny]==0 and mp[nx*n+ny]==d:mp[nx*n+ny]=dans=max(ans,d)st.put((nx,ny,d+1))print(ans)if __name__=="__main__":main()
更正
這題記憶體限制 64 MB 而測資最大 10 M , n <= 1000
建議避免用 tuple 來記錄可以用 row * n + col 的 int 型態來建立一個一維陣列, 會比較省記憶體
如果用 list 還是記憶體不夠, 可試試 import array
非常感謝 我等下試試
使用Array換變成TLEdef main():from sys import stdinfrom queue import Queuefrom array import arrayn=int(stdin.readline())ans=0#Tasksst=Queue()#MapPointsmp=array("i",[10**7]*n*n)#InputMapaaa=[]for i in range(n):aaa+=list(map(int,stdin.readline().split()))a=array('i',aaa)#找到商店 並加入佇列for i in range(n):for j in range(n):if a[i*n+j]==1:st.put((i,j,1))#BFS 從商店向外擴散 不會擴散到商店 1,牆壁-1,已被擴散的區域while not(st.empty()):x,y,d=st.get()for aa,bb in (-1,0),(1,0),(0,-1),(0,1):nx=x+aany=y+bbif n>nx>=0 and n>ny>=0:#Check IndexOutRangeif a[nx*n+ny]==0 and mp[nx*n+ny]==d:mp[nx*n+ny]=dans=max(ans,d)st.put((nx,ny,d+1))print(ans)if __name__=="__main__":main()
更正
def main():from sys import stdinfrom queue import Queuefrom array import arrayn=int(stdin.readline())ans=0#Tasksst=Queue()#MapPointsmp=array("i",[10**7]*n*n)#InputMapaaa=[]for i in range(n):aaa+=list(map(int,stdin.readline().split()))a=array('i',aaa)#找到商店 並加入佇列for i in range(n):for j in range(n):if a[i*n+j]==1:st.put((i,j,1))#BFS 從商店向外擴散 不會擴散到商店 1,牆壁-1,已被擴散的區域while not(st.empty()):x,y,d=st.get()for aa,bb in (-1,0),(1,0),(0,-1),(0,1):nx=x+aany=y+bbif n>nx>=0 and n>ny>=0:#Check IndexOutRangeif a[nx*n+ny]==0 and mp[nx*n+ny]==10**7:mp[nx*n+ny]=dans=max(ans,d)st.put((nx,ny,d+1))print(ans)if __name__=="__main__":main()
已將記憶體限制改成 512 MB,每個測資時限均改為1秒。