kotazon.com

虎太郎の備忘録

【AtCoder-Ruby】ABC096 B - Maximum Sum

問題

問題文

黒板に, 3 つの正の整数 A , B , C が書かれています.
E869120 君は, 以下の操作を K 回行います.

  • 黒板に書かれている整数のうち 1 つを選び, これを 2 倍した値に書き換える.

さて, K 回の操作を終えた後の, 黒板に書かれる整数の合計としてありうる最大の値はいくつでしょうか?

制約

  • A , B , C は 1 以上 50 以下の整数
  • K は 1 以上 10 以下の整数

問題リンク

考えたこと

  • A, B, C の最大値を 2 * K 倍した値に置き換える(これ間違い。。。)
  • A, B, C を足す
a = gets.strip.split.map(&:to_i).sort
K = gets.strip.to_i
 
a[-1] = a[-1] * (K * 2)
puts a.inject(:+)

痛恨の間違い。

2 * K ではなく、2 ** K 。。。
とりあえず、無難な直しで回答

res = a[-1]
K.times { res *= 2 }

a[-1] = res
puts a.inject(:+)

回答

2回目、とりあえず直して提出

a = gets.strip.split.map(&:to_i).sort
K = gets.strip.to_i

a[-1] = a[-1] * (2 ** K)
puts a.inject(:+)

考察

誤答は +5 分なので慎重に。
バランスですね。

ちなみに、タイムは以下の通り

問題 1回目 2回目
A 3:40 -
B 15:40(+5) 1:30(+5)
24:30 9:20

2回目の(+5)は問題読解の時間

冷静にできれば、10〜15分でいけたと思う。