##はじめに
AtCoder過去問C問題をRubyで解いてみました。
よろしくお願いします。
問題はこちらから確認してください↓
##C - Prison
まずは入力受け取ります。
n, m = gets.split.map(&:to_i)
ary = readlines(chomp: true).map{|line| line.split.map(&:to_i)}
2行目は複数行に複数要素が存在するときに二重配列として受け取ります。
入力例1でいえば[[1, 3], [2, 4]]
という感じで受け取ります。
この問題の答えの法則はRの中の最小値とLの中の最大値の差に+1した数字が答えになります。
現在の配列では扱いにくいのでL(左側)だけをまとめた配列とR(右側)だけをまとめた配列を作ります。
n, m = gets.split.map(&:to_i)
ary = readlines(chomp: true).map{|line| line.split.map(&:to_i)}
l_ary = []
r_ary = []
ary.each do |a|
l_ary << a[0]
r_ary << a[1]
end
これでLだけ、Rだけの配列がそれぞれできました。
入力例1でいえば
l_ary => [1, 2]
r_ary => [3, 4]
となります。
これを使って先ほど述べた「Rの中の最小値とLの中の最大値の差に+1」を出力させます。
もしその答えが0よりも小さくなったら通過できるidカードの数が-1とか-2などの負の数はあり得ないので0以下は全て0と出力させるようにします。
n, m = gets.split.map(&:to_i)
ary = readlines(chomp: true).map{|line| line.split.map(&:to_i)}
l_ary = []
r_ary = []
ary.each do |a|
l_ary << a[0]
r_ary << a[1]
end
if (r_ary.min-l_ary.max)+1 < 0
puts 0
else
puts (r_ary.min-l_ary.max)+1
end