#32340: 請幫我看是哪裡出錯,程式碼NA30%,感謝協助


yuxiangzhong591@gmail.com (鍾宇翔)

學校 : 國立桃園高級中學
編號 : 193359
來源 : [42.72.15.196]
最後登入時間 :
2023-04-25 22:11:43
g596. 2. 動線安排 -- 2021年11月APCS | From: [111.240.21.177] | 發表日期 : 2022-10-01 01:38

 

n,m,h=map(int,input().split())

a=[[0]*m for i in range(n)]

b=[[0]*3 for i in range(h)]

for i in range(h):

    e=list(map(int,input().split()))

    for j in range(3):

        b[i][j]=e[j]

y=[]

for i in b:#有線設1,有樁設2

        if i[2]==0:

            a[i[0]][i[1]]=2

            for j in range(i[1]+1,m):#right

                if a[i[0]][j]==2:

                    for t in range(i[1]+1,j):

                       if a[i[0]][t]!=2:

                          a[i[0]][t]=1

            f=0

            for k in range(n):

                for l in range(m):

                    if a[k][l]!=0:

                        f=f+1

            y.append(f)

            for j in range(0,i[1]):#left

                if a[i[0]][j]==2:

                    for t in range(j+1,i[1]):

                        if a[i[0]][t]!=2:

                          a[i[0]][t]=1

            f=0

            for k in range(n):

                for l in range(m):

                    if a[k][l]!=0:

                        f=f+1

            y.append(f)

            for j in range(0,i[0]):#up

                if a[j][i[1]]==2:

                    for t in range(j+1,i[0]):

                        if a[t][i[1]]!=2:

                          a[t][i[1]]=1

            f=0

            for k in range(n):

                for l in range(m):

                    if a[k][l]!=0:

                        f=f+1

            y.append(f)

            for j in range(i[0]+1,n):#down

                if a[j][i[1]]==2:

                    for t in range(i[0]+1,j):

                        if a[t][i[1]]!=2:

                          a[t][i[1]]=1  

            f=0

            for k in range(n):

                for l in range(m):

                    if a[k][l]!=0:

                        f=f+1

            y.append(f)

        if i[2]==1:

            a[i[0]][i[1]]=0

            for j in range(i[1]+1,m):#right

                if a[i[0]][j]==2:              

                   w=0

                   for t in range(i[1]+1,j):

                        a[i[0]][t]=0          

                        for q in range(n):          

                             if a[q][t]==2:        

                                   w=w+1                          

                        if w>=2:          

                            a[i[0]][t]=1    

                        w=0          

                   break    

            f=0

            for k in range(n):

                for l in range(m):

                    if a[k][l]!=0:

                        f=f+1

            y.append(f)                              

            for j in range(i[1]-1,-1,-1):#left

               if a[i[0]][j]==2:

                    w=0

                    for t in range(j+1,i[1]):                        

                        a[i[0]][t]=0                            

                        for q in range(n):          

                             if a[q][t]==2:        

                                   w=w+1                          

                        if w>=2:

                            a[i[0]][t]=1

                        w=0

                    break

            f=0

            for k in range(n):

                for l in range(m):

                    if a[k][l]!=0:

                        f=f+1

            y.append(f)

            for j in range(i[0]-1,-1,-1):#up

               if a[j][i[1]]==2:

                    w=0

                    for t in range(j+1,i[0]):

                        a[t][i[1]]=0                        

                        for q in range(m):          

                             if a[t][q]==2:        

                                   w=w+1                          

                        if w>=2:

                            a[t][i[1]]=1      

                        w=0  

                    break

            f=0

            for k in range(n):

                for l in range(m):

                    if a[k][l]!=0:

                        f=f+1

            y.append(f)

            for j in range(i[0]+1,n):#down

               if a[j][i[1]]==2:

                    w=0

                    for t in range(i[0]+1,j):

                        a[t][i[1]]=0                      

                        for q in range(m):          

                             if a[t][q]==2:        

                                   w=w+1                          

                        if w>=2:

                            a[t][i[1]]=1  

                        w=0

                    break

            f=0

            for k in range(n):

                for l in range(m):

                    if a[k][l]!=0:

                        f=f+1

            y.append(f)

y.sort(reverse=True)  

print(y[1])

x=0                                                

for i in range(n):

    for j in range(m):

        if a[i][j]!=0:

            x=x+1

print(x)

 

 

 
#32350: Re: 請幫我看是哪裡出錯,程式碼NA30%,感謝協助


yuxiangzhong591@gmail.com (鍾宇翔)

學校 : 國立桃園高級中學
編號 : 193359
來源 : [42.72.15.196]
最後登入時間 :
2023-04-25 22:11:43
g596. 2. 動線安排 -- 2021年11月APCS | From: [111.240.75.160] | 發表日期 : 2022-10-01 20:48

補充說明:

這題我的概念是先搜尋上下左右四個方向,只要碰到柱子就停止(統一由柱子開始往外搜尋,不管哪個方向),然後再依指令放線或收線,其中,假如柱子在水平收線,除了水平找柱子之外,每迭代一個格子就檢查他的垂直方向是否有和其他的柱子連線(也就是他所在的那一直行有沒有兩個柱子以上),如果有,便不收,垂直收放線亦然,我跑了範例側資沒問題,但是實際測試卻只有30%(只跑九個,時間不夠)我不知道是否遺漏什麼概念,請老師們幫我解答

 
#32414: Re: 請幫我看是哪裡出錯,程式碼NA30%,感謝協助


cges30901 (cges30901)

學校 : 不指定學校
編號 : 30877
來源 : [101.136.203.77]
最後登入時間 :
2024-04-07 15:34:14
g596. 2. 動線安排 -- 2021年11月APCS | From: [39.9.78.197] | 發表日期 : 2022-10-08 16:34

補充說明:

這題我的概念是先搜尋上下左右四個方向,只要碰到柱子就停止(統一由柱子開始往外搜尋,不管哪個方向),然後再依指令放線或收線,其中,假如柱子在水平收線,除了水平找柱子之外,每迭代一個格子就檢查他的垂直方向是否有和其他的柱子連線(也就是他所在的那一直行有沒有兩個柱子以上),如果有,便不收,垂直收放線亦然,我跑了範例側資沒問題,但是實際測試卻只有30%(只跑九個,時間不夠)我不知道是否遺漏什麼概念,請老師們幫我解答


我還沒有看程式碼,但你收線的概念有問題喔,就算垂直方向有和其他的柱子連線,還是有可能沒有垂直線(已經被收掉了)。舉個例子:

6 6 7
0 1 0
2 1 0
1 0 0
1 3 0
1 2 0
1 2 1
0 1 1

正確輸出應該是6 3,(1,1)在第6次操作拆了水平線,第7次操作拆了垂直線,所以最後是沒有線的

我建議要把垂直線和水平線做區分會比較簡單

 
ZeroJudge Forum