0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[Ruby] AtCoder過去問 C - Alchemist

Posted at

##はじめに
AtCoder過去問C問題をRubyで解いてみました。

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

##C - Alchemist

なんだかゲームとかで使われそうなアルゴリズムですね。
入力受け取りから書いていきます。

n = gets.to_i
worth = gets.split.map(&:to_i).sort!

ちなみに私の解き方では1行目のnは使いません。
2行目は複数の値をworth(価値)という変数に配列として代入しています。
また.sort!をつけてます。これは配列の中身を昇順に並び替えています。

この問題の肝は、どの順番に合成していけば最大価値を持ったの具材が作れるかです。

その条件は小さいものから、処理を行うことです。

配列を昇順に並び替えたのはそのためです。
shiftメソッドがかなりいきてきます。
ちなみにshiftの使い方はこちらにまとめております。↓

n = gets.to_i
worth = gets.split.map(&:to_i).sort!

ans = worth.shift

while worth != []
  ans = (ans + worth.shift)/2.to_f
end

puts ans

問題文の足して2で割るという処理は合成された時のみなので一番初めの元となる具材には適用しません。
ですのではじめにansに一番小さい要素(配列の先頭)を代入しておきます。

while文の条件式に配列worthが空になるまで処理を繰り返すようにします。
処理の中身はworthの中で一番小さい要素(配列の先頭)を取り出して、ansに足して、2で割ってansに代入です。

worthの中が空になったらansに一番価値が大きい方法で合成された具材の価値が入っているはずです。

0
0
0

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?