問題へのリンク
雑感
コンテスト中に提出したものはNの桁数が1のときを考慮しておらずREを連発してしまい、焦ってかなり汚い。 制約が であり全探索をするとTLEになるので以下の考え方で書いた。
- Nの桁数が奇数の場合は の形に修正する
- 条件を満たす整数は という形になるため、前半の数が
答えないし答え - 1になるのではないかと考え、NをStringにして前半と後半を分割する - Nの桁数が1桁の場合の答えは
- 前半より後半の整数が大きい場合、答えは と一致する
(例:120150) - 後半より前半の整数が大きい場合、答えは と一致する
(例:150120)
解説を見るともっと良い書き方がありそうなので後ほど更新する。
回答
- コンテスト中に提出したもの
main.rb
n = gets.to_i
length = n.to_s.length
unless length == 1
n = ('9' * (length - 1)).to_i if length.odd?
split = n.to_s.scan(/.{1,#{length / 2}}/)
end
if length == 1
puts 0
elsif split[0].to_i <= split[1].to_i
puts split[0].to_i
else
puts split[0].to_i - 1
end- 後から書き直したもの
main.rb
# TODO