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)
補充說明:
這題我的概念是先搜尋上下左右四個方向,只要碰到柱子就停止(統一由柱子開始往外搜尋,不管哪個方向),然後再依指令放線或收線,其中,假如柱子在水平收線,除了水平找柱子之外,每迭代一個格子就檢查他的垂直方向是否有和其他的柱子連線(也就是他所在的那一直行有沒有兩個柱子以上),如果有,便不收,垂直收放線亦然,我跑了範例側資沒問題,但是實際測試卻只有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次操作拆了垂直線,所以最後是沒有線的
我建議要把垂直線和水平線做區分會比較簡單