#34519: python 題解


willy633526@gmail.com (ByTech)

學校 : 不指定學校
編號 : 93152
來源 : [49.216.42.179]
最後登入時間 :
2024-03-29 19:29:31
g276. 2. 魔王迷宮 -- 2021年9月APCS | From: [180.177.10.90] | 發表日期 : 2023-03-26 22:32

https://bythetech.com/blog/g276

 
#35416: Re: python 題解


yiting20060228@gmail.com (黃翊婷)

學校 : 不指定學校
編號 : 193900
來源 : [118.166.89.201]
最後登入時間 :
2024-10-23 16:49:47
g276. 2. 魔王迷宮 -- 2021年9月APCS | From: [111.253.132.84] | 發表日期 : 2023-06-01 11:06

https://bythetech.com/blog/g276

您好 可以幫我看看這個題目 用我的寫法寫的問題在哪嗎

已經琢磨好久了但沒有找到問題…

感謝你

n,m,num=map(int,input().split())
kingList=[]
for i in range(num):
    king=list(map(int,input().split()))
    king.append(int(0))
    kingList.append(king)
space=[[0]*m for i in range(n)]
#print(space)

#有國王過去+1
#有炸彈+1
#大於2爆炸(to 0)
#無事0
boomed=0
count=0

#初始位置有國王
for k in range(num):
    a=kingList[k][0]
    b=kingList[k][1]
    #print(a,b)
    space[a][b]=1
    
#重複移動直至boomed等於國王人數
while True:
    #print(kingList)
    #print('origin sapce',space)
    boom=[]
    for k in range(num):
        if kingList[k][4]==1: #檢查該國王是否已被刪除
            continue
        a=kingList[k][0] #國王位置
        b=kingList[k][1]
        stepA=kingList[k][2] #國王移動方式
        stepB=kingList[k][3]
        
        #移動放炸彈
        if 0<=a+stepA<n and 0<=b+stepB<m: #檢查移動後有無超出邊際
            space[a+stepA][b+stepB]+=1
            kingList[k][0]=a+stepA #移動國王
            kingList[k][1]=b+stepB
            #print(kingList[k])
        else:
            #print(k,"有超出邊際")
            boomed+=1
            kingList[k][4]=1
    #判斷移動後是否boom
    for i in range(n):
        for j in range(m):
            if space[i][j]>=2:
                for k in range(num):
                    if kingList[k][0]==i and kingList[k][1]==j:
                        #print(k,"有踩到炸彈")
                        space[i][j]=0
                        boom.append(k)
    #炸
    #print(boom) 
    for b in boom:
        kingList[b][4]=1
        space[kingList[b][0]][kingList[b][1]]=0
        #print("boomed",space)
        boomed+=1
    
    if boomed>=num:
        break

#算炸彈
for i in range(n):
    for j in range(m):
        if space[i][j]==1:
            count+=1
print(count)

 
ZeroJudge Forum