0
0

More than 1 year has passed since last update.

[Ruby] AtCoder過去問 B - Contest with Drinks Easy

Posted at

はじめに

AtCoder過去問B問題をRubyで解いてみました。
よろしくお願いします。

問題はこちらから確認してください↓

B - Contest with Drinks Easy

まずは入力値を受け取る記述を書きます。今回は少々多めでした。
p_xに関しては(4行目以降)二次元配列として受け取っています。

n = gets.to_i
t = gets.split.map(&:to_i)
m = gets.to_i
px = readlines(chomp: true).map{|line| line.split(' ').map(&:to_i)}

僕は頭の整理がしやすいように、pとxはそれぞれの配列に入れ直しました。

n = gets.to_i
t = gets.split.map(&:to_i)
m = gets.to_i
px = readlines(chomp: true).map{|line| line.split(' ').map(&:to_i)}
p_ary = []
x_ary = []
px.each do |p_x|
  p_ary << p_x[0]
  x_ary << p_x[1]
end

pだけの配列とxだけの配列が作れました。

x_aryとp_aryを使って、問題文通りに配列tを書き換えて、sumメソッドで合計して出力というのを繰り返します。

n = gets.to_i
t = gets.split.map(&:to_i)
m = gets.to_i
px = readlines(chomp: true).map{|line| line.split(' ').map(&:to_i)}
p_ary = []
x_ary = []
px.each do |p_x|
  p_ary << p_x[0]
  x_ary << p_x[1]
end

cnt = 0
p_ary.each do |x|
  t_tmp = t.dup
  t_tmp[x-1] = x_ary[cnt]
  puts t_tmp.sum
  cnt += 1
end

each文の1行目は配列tを初期化しているという感じです。

おまけ

実は最初、each文の1行目はt_tmp = tとしていたのですが、t_tmpの中が初期化できなかったんですね。。。
おそらくrubyという言語の構造の話だとは思うのですが、t_tmp=tという記述でt_tmpとtが同じものとして認識されているので、t_tmpを加工したらtも加工されている。。。?ということなのでしょうか

配列tをコピーするにはdupメソッドをつけてやればt_tmpとtは別物と判断してくれて、初期化できました。

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0