天下一プログラマーコンテスト2015予選B C 擬二等辺三角形
問題
方針
実験してOEISにかけたら一般項がヒットしたので,多倍長で計算しました. A001971
想定解は難しい考察です. こういう数オリみたいなのは苦手だ…
実装
@mod = 1000000007
def f n
(n**2-2*n+5)>>3
end
n = gets.chomp.to_i
if n >= 10
puts f(n-6) % @mod
else
s = {}
for i in 1..n do
for j in (i+1)..n do
for k in (j+1)..n do
v = [i,j,k].sort
next if i+j+k > n
next if v[0]+v[1] <= v[2]
next if v[1]+v[2] <= v[0]
next if v[2]+v[0] <= v[1]
if v[0]+1==v[1] || v[1]+1==v[2]
if s.include? v
s[v] += 1
else
s[v] = 1
end
end
end
end
end
puts s.size
end