LoginSignup
1
0

More than 1 year has passed since last update.

ABC138 C - Alchemist から学んだ

Posted at

abc138_1.png
abc138_2.png
abc138_3.png

分からないので回答を見た。

なるほど。

悪かったところ。
以下のように考えていた。

bad_image.py
#  〇
#  /\
# 〇 〇
# /\ /\
#〇〇〇〇

下の階層から上に行くにしたがって割る係数が大きくなる。
だから、小さい値に係数が集中するツリーを考える必要があった。
つまり、以下のツリーが最適

good_image.py
#   〇  
#   /\
#  〇 \
#  /\  \
# 〇 \  \
# / \ \  \
#〇 〇 〇 〇
#↑コレ

以上のように考えると、
1/2 が掛けられる回数が左から昇順となっていることが分かる
よって与えられた配列をソートしておけば、配列中、比較的大きい値には 1/2 が掛ける回数は最小になる。
なるほど。勉強になりました。

abc138c.py
N = int(input())
V = list(map(int,input().split()))

V.sort()
ans = 0
for i in range(N):
    if i == 0:
        ans = V[0]
    else:
        ans = (ans+V[i])/2

print(ans)

あともう一つ。
演算に /2 を使ったことだ。
割り算の回数が 50程度の場合は -5 乗 程度の誤差は
問題にはならないということだ。

1
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
1
0