回答
http://judge.u-aizu.ac.jp/onlinejudge/review.jsp?rid=1587269
問題文のとおりに実装するだけで良いのだが,思わぬところでハマったので,備忘録的にブログを書いておく.
まず,rubyを用いて,[1,2,3,4,5]のような配列を作る場合ですが,
ngarray = [1..5] okarray = (1..5).to_a
となります….この例のngarrayだとRangeクラスが1つだけ格納される形になるので,思ったような動作をしません.ああぁんなんで…(日をまたいで1時間以上悩んでいました)
参考:
rubyで連番の配列作ろうとして気づいたアホな思いこみ - みんなのちからになりたい
Class: Array (Ruby 2.2.3)
で,それを解決したうえで,部分的な配列を作る場合を確認.
array = [0..5] subarray = array[2..3] # => [2, 3]
このように書く.配列同士は"+"でくっつけられる.ドットの数が2つか,3つかで範囲が変わるのは少しわかりづらい感じがしますね.どっちか片方だけでいいんじゃないかな….
っていう事前の知識があれば一瞬で解けたんじゃないですかね….
それと,以下のoutputに関する文で,以下の点を読み落としていて,勘違いをしていた.
最初に一番下を1番として順にn番まで の札が積み上げられた山を仮定して,
こことても重要です.私は一番下をnにして積んでいたので,sampleと答えが合わず四苦八苦しました.
教訓:問題文をよく読もう.
while true do n, r = gets.split(" ").map(&:to_i) if n == 0 && r == 0 break end arr = (1..n).to_a.reverse r.times do p, c = gets.split(" ").map(&:to_i) p -= 1 ta = arr[p...p+c] + arr[0...p] + arr[p+c..n] arr = ta end puts arr[0] end