#40384: python似乎無法過關


s11104220@school.saihs.edu.tw (施同學)

學校 : 臺北市立松山高級工農職業學校
編號 : 221254
來源 : [223.137.72.55]
最後登入時間 :
2024-12-11 13:02:15

#40386: Re: python似乎無法過關


asnewchien@gmail.com (david)

學校 : 南投縣立旭光高級中學
編號 : 68108
來源 : [114.42.176.221]
最後登入時間 :
2025-10-04 22:52:03

這題記憶體限制 64 MB 而測資最大 10 M , n <= 1000
建議避免用 tuple 來記錄

可以用 row * n + col 的 int 型態來建立一個一維陣列, 會比較省記憶體
如果用 list 還是記憶體不夠, 可試試 import array 

#40387: Re: python似乎無法過關


s11104220@school.saihs.edu.tw (施同學)

學校 : 臺北市立松山高級工農職業學校
編號 : 221254
來源 : [223.137.72.55]
最後登入時間 :
2024-12-11 13:02:15

這題記憶體限制 64 MB 而測資最大 10 M , n <= 1000
建議避免用 tuple 來記錄

可以用 row * n + col 的 int 型態來建立一個一維陣列, 會比較省記憶體
如果用 list 還是記憶體不夠, 可試試 import array 


非常感謝 我等下試試

#40388: Re: python似乎無法過關


s11104220@school.saihs.edu.tw (施同學)

學校 : 臺北市立松山高級工農職業學校
編號 : 221254
來源 : [223.137.72.55]
最後登入時間 :
2024-12-11 13:02:15

這題記憶體限制 64 MB 而測資最大 10 M , n <= 1000
建議避免用 tuple 來記錄

可以用 row * n + col 的 int 型態來建立一個一維陣列, 會比較省記憶體
如果用 list 還是記憶體不夠, 可試試 import array 


非常感謝 我等下試試


使用Array換變成TLE

#40389: Re: python似乎無法過關


s11104220@school.saihs.edu.tw (施同學)

學校 : 臺北市立松山高級工農職業學校
編號 : 221254
來源 : [223.137.72.55]
最後登入時間 :
2024-12-11 13:02:15

這題記憶體限制 64 MB 而測資最大 10 M , n <= 1000
建議避免用 tuple 來記錄

可以用 row * n + col 的 int 型態來建立一個一維陣列, 會比較省記憶體
如果用 list 還是記憶體不夠, 可試試 import array 


非常感謝 我等下試試


使用Array換變成TLE

def main():
    from sys import stdin
    from queue import Queue
    from array import array
    n=int(stdin.readline())
    ans=0
    #Tasks
    st=Queue()
    #MapPoints
    mp=array("i",[10**7]*n*n)
    #InputMap
    aaa=[]
    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+aa
            ny=y+bb
            if n>nx>=0 and n>ny>=0:#Check IndexOutRange
                if a[nx*n+ny]==0 and mp[nx*n+ny]==d:
                    mp[nx*n+ny]=d
                    ans=max(ans,d)
                    st.put((nx,ny,d+1))
    print(ans)
if __name__=="__main__":main()



#40392: Re: python似乎無法過關


s11104220@school.saihs.edu.tw (施同學)

學校 : 臺北市立松山高級工農職業學校
編號 : 221254
來源 : [223.137.72.55]
最後登入時間 :
2024-12-11 13:02:15

這題記憶體限制 64 MB 而測資最大 10 M , n <= 1000
建議避免用 tuple 來記錄

可以用 row * n + col 的 int 型態來建立一個一維陣列, 會比較省記憶體
如果用 list 還是記憶體不夠, 可試試 import array 


非常感謝 我等下試試


使用Array換變成TLE

def main():
    from sys import stdin
    from queue import Queue
    from array import array
    n=int(stdin.readline())
    ans=0
    #Tasks
    st=Queue()
    #MapPoints
    mp=array("i",[10**7]*n*n)
    #InputMap
    aaa=[]
    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+aa
            ny=y+bb
            if n>nx>=0 and n>ny>=0:#Check IndexOutRange
                if a[nx*n+ny]==0 and mp[nx*n+ny]==d:
                    mp[nx*n+ny]=d
                    ans=max(ans,d)
                    st.put((nx,ny,d+1))
    print(ans)
if __name__=="__main__":main()



更正

def main():
    from sys import stdin
    from queue import Queue
    from array import array
    n=int(stdin.readline())
    ans=0
    #Tasks
    st=Queue()
    #MapPoints
    mp=array("i",[10**7]*n*n)
    #InputMap
    aaa=[]
    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+aa
            ny=y+bb
            if n>nx>=0 and n>ny>=0:#Check IndexOutRange
                if a[nx*n+ny]==0 and mp[nx*n+ny]==10**7:
                    mp[nx*n+ny]=d
                    ans=max(ans,d)
                    st.put((nx,ny,d+1))
    print(ans)
if __name__=="__main__":main()
#41062: Re: python似乎無法過關


wubaie (老億)

學校 : 不指定學校
編號 : 123253
來源 : [114.47.210.96]
最後登入時間 :
2025-10-12 11:15:14

這題記憶體限制 64 MB 而測資最大 10 M , n <= 1000
建議避免用 tuple 來記錄

可以用 row * n + col 的 int 型態來建立一個一維陣列, 會比較省記憶體
如果用 list 還是記憶體不夠, 可試試 import array 


非常感謝 我等下試試


使用Array換變成TLE

def main():
    from sys import stdin
    from queue import Queue
    from array import array
    n=int(stdin.readline())
    ans=0
    #Tasks
    st=Queue()
    #MapPoints
    mp=array("i",[10**7]*n*n)
    #InputMap
    aaa=[]
    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+aa
            ny=y+bb
            if n>nx>=0 and n>ny>=0:#Check IndexOutRange
                if a[nx*n+ny]==0 and mp[nx*n+ny]==d:
                    mp[nx*n+ny]=d
                    ans=max(ans,d)
                    st.put((nx,ny,d+1))
    print(ans)
if __name__=="__main__":main()



更正

def main():
    from sys import stdin
    from queue import Queue
    from array import array
    n=int(stdin.readline())
    ans=0
    #Tasks
    st=Queue()
    #MapPoints
    mp=array("i",[10**7]*n*n)
    #InputMap
    aaa=[]
    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+aa
            ny=y+bb
            if n>nx>=0 and n>ny>=0:#Check IndexOutRange
                if a[nx*n+ny]==0 and mp[nx*n+ny]==10**7:
                    mp[nx*n+ny]=d
                    ans=max(ans,d)
                    st.put((nx,ny,d+1))
    print(ans)
if __name__=="__main__":main()

已將記憶體限制改成 512 MB,每個測資時限均改為1秒。

#41064: Re: python似乎無法過關


wubaie (老億)

學校 : 不指定學校
編號 : 123253
來源 : [114.47.210.96]
最後登入時間 :
2025-10-12 11:15:14

已重傳測資,N改成最大100

#41065: Re: python似乎無法過關


wubaie (老億)

學校 : 不指定學校
編號 : 123253
來源 : [114.47.210.96]
最後登入時間 :
2025-10-12 11:15:14

這題記憶體限制 64 MB 而測資最大 10 M , n <= 1000
建議避免用 tuple 來記錄

可以用 row * n + col 的 int 型態來建立一個一維陣列, 會比較省記憶體
如果用 list 還是記憶體不夠, 可試試 import array 

已重傳測資,N改成最大100