結果
| 問題 |
No.483 マッチ並べ
|
| コンテスト | |
| ユーザー |
smz_8110
|
| 提出日時 | 2017-04-14 09:35:42 |
| 言語 | Ruby (3.4.1) |
| 結果 |
AC
|
| 実行時間 | 111 ms / 2,000 ms |
| コード長 | 1,337 bytes |
| コンパイル時間 | 129 ms |
| コンパイル使用メモリ | 7,552 KB |
| 実行使用メモリ | 12,416 KB |
| 最終ジャッジ日時 | 2024-07-18 15:12:50 |
| 合計ジャッジ時間 | 6,701 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 53 |
コンパイルメッセージ
Syntax OK
ソースコード
N=gets.to_i
h={}
m=N.times.map{
a=gets.split.map(&:to_i)
a<<(b=a[0]*1000+a[1])
a<<(c=a[2]*1000+a[3])
(h[b]=(h[b]||[]))<<a
(h[c]=(h[c]||[]))<<a
a
}
F=->m,h,a,r,o,u{
u[a]=true
o[a]=true
b=h[a[4]]
c=h[a[5]]
g=b|c
if b.size==1
if c.size==1
return true
else
z=true
c.each{|d|
unless o[d]
z=F[m,h,d,r,o,u]
break unless z
end
}
o[a]=false
return z
end
elsif c.size==1
z=true
b.each{|d|
unless o[d]
z=F[m,h,d,r,o,u]
break unless z
end
}
o[a]=false
return z
else
unless r[a[0]][a[1]]
r[a[0]][a[1]]=true
z=true
g.each{|d|
unless o[d]
z=F[m,h,d,r,o,u]
break unless z
end
}
r[a[0]][a[1]]=false
if z
o[a]=false
return true
end
end
unless r[a[2]][a[3]]
r[a[2]][a[3]]=true
z=true
g.each{|d|
unless o[d]
z=F[m,h,d,r,o,u]
break unless z
end
}
r[a[2]][a[3]]=false
o[a]=false
return z
end
end
o[a]=false
false
}
u={}
m.each{|a|u[a]=true if h[a[4]].size==1||h[a[5]].size==1}
m.each{|a|
next if u[a]
r=112.times.map{[]}
unless F[m,h,a,r,{}.merge(u),u]
puts "NO"
exit
end
}
puts "YES"
smz_8110