結果
| 問題 |
No.569 3 x N グリッドのパスの数
|
| コンテスト | |
| ユーザー |
horiesiniti
|
| 提出日時 | 2017-09-14 18:15:41 |
| 言語 | Ruby (3.4.1) |
| 結果 |
AC
|
| 実行時間 | 565 ms / 2,000 ms |
| コード長 | 2,211 bytes |
| コンパイル時間 | 411 ms |
| コンパイル使用メモリ | 7,552 KB |
| 実行使用メモリ | 12,800 KB |
| 最終ジャッジ日時 | 2024-11-07 19:54:26 |
| 合計ジャッジ時間 | 22,424 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / 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=[]
sum=[]
mod1=1000000007
perm.each{|e1|
left=e1[0]
r1=e1[1]
p1=e1[2]
perm2.each{|e2|
l1=e2[0]
right=e2[1]
p2=e2[2]
if r1==l1 then
p3=(p1*p2)%mod1
sum.push([left,right,p3])
end
}
}
sum.sort!
e1=sum[0]
sum.shift
sum.each{|e2|
if e1[0]==e2[0] && e1[1]==e2[1] then
e1[2]=(e1[2]+e2[2])%mod1
else
res.push([e1[0],e1[1],e1[2]])
e1=e2
end
}
res.push([e1[0],e1[1],e1[2]])
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