結果
| 問題 |
No.569 3 x N グリッドのパスの数
|
| コンテスト | |
| ユーザー |
horiesiniti
|
| 提出日時 | 2017-09-15 05:27:47 |
| 言語 | Ruby (3.4.1) |
| 結果 |
AC
|
| 実行時間 | 321 ms / 2,000 ms |
| コード長 | 2,163 bytes |
| コンパイル時間 | 590 ms |
| コンパイル使用メモリ | 7,424 KB |
| 実行使用メモリ | 12,672 KB |
| 最終ジャッジ日時 | 2024-11-07 22:27:21 |
| 合計ジャッジ時間 | 14,637 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 60 |
コンパイルメッセージ
Syntax OK
ソースコード
require 'set'
mod1=1000000007
def f(a1,a2)
a1.each{|e|
a2.push([e[0].reverse(),e[1].reverse])
}
end
def g(all,es)
es.each{|e1|
e1.each{|e2|
all.push([e2[0],e2[1],1])
}
}
end
def f2(perm,perm2)
res=[]
h1={}
h2=Hash.new(0)
perm2.each{|e|
if !h1.key?(e[0]) then
h1[e[0]]=[[e[1],e[2]]]
else
h1[e[0]].push([e[1],e[2]])
end
}
mod1=1000000007
perm.each{|e1|
left=e1[0]
r1=e1[1]
p1=e1[2]
if h1.key?(r1) then
h1[r1].each{|e3|
right=e3[0]
p2=e3[1]
h2[[left,right]]+=(p1*p2)%mod1
}
end
}
h2.each{|k,v|
res.push([k[0],k[1],v])
}
return res
end
all=[]
a111=[ ["0001","1000"],
["1000","0001"]]
a110=[ ["1000","0010"],
["1023","0001"],
["0010","1000"],
["0001","3021"]]
a011=[]
f(a110,a011)
a101=[ ["1230","0001"],
["1203","0010"],
["1000","0123"],
["0100","1023"],
["3021","0100"],
["0321","1000"],
["0001","3210"],
["0010","3201"]]
a100=[ ["0123","1023"],
["0100","1000"],
["0321","3021"],
["3021","0321"],
["1000","0100"],
["1023","0123"],
["0010","3210"],
["0001","3201"],
["1230","0010"],
["1203","0001"]]
a001=[]
f(a100,a001)
a010=[ ["0010","0100"],
["0100","0010"],
["3201","3021"],
["1203","1023"],
["1023","1203"],
["3021","3201"],
["0123","0001"],
["0001","0321"],
["1000","1230"],
["3210","1000"]]
a000=[ ["1000","1000"],
["0100","0100"],
["0010","0010"],
["0001","0001"],
["1230","1230"],
["1203","1203"],
["1023","1023"],
["0123","0123"],
["0321","0321"],
["3201","3201"],
["3021","3021"],
["3210","3210"]]
g(all,[a000,a001,a010,a100,a011,a101,a110,a111])
s=[
["0000","1000",1],
["0000","0100",1],
["0000","0010",1],
["0000","0001",1],
["0000","1230",1],
["0000","1203",1],
["0000","1023",1],
["0000","0123",1]]
g=[
["0001","0000",1],
["0010","0000",1],
["0100","0000",1],
["1000","0000",1],
["1203","0000",1],
["1230","0000",1],
["1023","0000",1],
["0123","0000",1]
]
n=gets.to_i
n=n-1
perm2=[]
allPerm=[]
s.each{|e|
allPerm.push([e[0],e[1],1])
}
all.each{|e|
perm2.push([e[0],e[1],1])
}
while n>0
if n%2==1 then
allPerm=f2(allPerm,perm2)
end
perm2=f2(perm2,perm2)
n=n/2
end
ans=f2(allPerm,g)
puts ans[0][2]%mod1
horiesiniti