結果
問題 | No.359 門松行列 |
ユーザー |
![]() |
提出日時 | 2016-04-18 10:19:07 |
言語 | Python2 (2.7.18) |
結果 |
AC
|
実行時間 | 63 ms / 2,000 ms |
コード長 | 1,947 bytes |
コンパイル時間 | 113 ms |
コンパイル使用メモリ | 7,168 KB |
実行使用メモリ | 6,820 KB |
最終ジャッジ日時 | 2024-10-04 13:26:29 |
合計ジャッジ時間 | 1,327 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 17 |
ソースコード
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 retdef isKadomatsu(A):if A[0]==A[1] or A[1]==A[2] or A[0]==A[2]:return Falseelif A[0]<A[1] and A[1]>A[2]:return Trueelif A[0]>A[1] and A[1]<A[2]:return Truereturn FalseT=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 shortif L==1:print 0continue# set where is blankpointblank=[]ranges=[(1,L-1)]ranges=rangesplit(ranges,L/2)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 rangescheckList=[[(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=0for l,r in ranges:Btmp=ABtmp[blank[0][0]][blank[0][1]]=lBtmp[blank[1][0]][blank[1][1]]=L-lok=Truefor line in checkList:for (p,q) in line:B=[A[p][q] for (p,q) in line]if not isKadomatsu(B):ok=Falsebreakif ok:ans+=r-l+1print ans