結果
| 問題 |
No.359 門松行列
|
| コンテスト | |
| ユーザー |
yaoshimax
|
| 提出日時 | 2016-04-18 10:12:39 |
| 言語 | Python2 (2.7.18) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,913 bytes |
| コンパイル時間 | 72 ms |
| コンパイル使用メモリ | 7,168 KB |
| 実行使用メモリ | 6,820 KB |
| 最終ジャッジ日時 | 2024-10-04 13:26:24 |
| 合計ジャッジ時間 | 1,310 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 3 WA * 14 |
ソースコード
def rangesplit(L,p):
ret=[]
for l,r in L:
if r<p:
ret.append((l,r))
elif p<l:
ret.append((l,r))
else:
if l<=p-1 :
ret.append((l,p-1))
if p+1<=r :
ret.append((p+1,r))
ret.append((p,p))
return ret
def isKadomatsu(A):
if A[0]==A[1] or A[1]==A[2] or A[0]==A[2]:
return False
elif A[0]<A[1] and A[1]>A[2]:
return True
elif A[0]>A[1] and A[1]<A[2]:
return True
return False
T=int(raw_input())
for ti in range(T):
L=int(raw_input())
A=[map(int,raw_input().split()) for i in range(3)]
# l is too short
if L==1:
print 0
continue
# set where is blankpoint
blank=[]
ranges=[(1,L-1)]
for i in range(3):
for j in range(3):
if A[i][j]==0:
blank.append((i,j))
else:
if A[i][j]< L:
#print "split", A[i][j]
ranges=rangesplit(ranges,A[i][j])
#print ranges
#print "split", L-A[i][j]
ranges=rangesplit(ranges,L-A[i][j])
#print ranges
checkList=[[(0,0),(0,1),(0,2)],
[(1,0),(1,1),(1,2)],
[(2,0),(2,1),(2,2)],
[(0,0),(1,0),(2,0)],
[(0,1),(1,1),(2,1)],
[(0,2),(1,2),(2,2)],
[(0,0),(1,1),(2,2)],
[(0,2),(1,1),(2,0)]]
ans=0
for l,r in ranges:
Btmp=A
Btmp[blank[0][0]][blank[0][1]]=l
Btmp[blank[1][0]][blank[1][1]]=L-l
ok=True
for line in checkList:
for (p,q) in line:
B=[A[p][q] for (p,q) in line]
if not isKadomatsu(B):
ok=False
break
if ok:
ans+=r-l+1
print ans
yaoshimax