【ABC088 B】「Card Game for Two」を解く【Python3】

「AtCoder」解説一覧へ

AtCoder過去問精選10問まとめへ

N枚のカードを使ってゲームしたときに、Alice は Bob より何点多く取るか求める問題です。

提出
n = int(input())
a = sorted(list(map(int, input().split())), reverse=True)

alice = 0
bob = 0

for i in range(n):
    if i%2 == 0:
        alice += a[i]
    else:
        bob += a[i]

print(alice-bob)

2 人とも自分の得点を最大化するような戦略を取るため、自分の番には、残ったカードの中から最大のものを取ることになります。

つまり、大きい順に 2 人でカードを取ることと同じです。

リストaを降順にソートして、インデックスが偶数の時は Alice に、奇数の時は Bob に加えます。

最後にAlice から Bob を引いたものを出力します。

以下のように短く書くこともできます。

提出
n = int(input())
a = sorted(list(map(int, input().split())), reverse=True)

print(sum(a[::2])-sum(a[1::2]))

スライス操作を用いて、 Alice の合計値と Bob の合計値を計算し、Alice から引いたものを出力します。

【ABC088】解説記事リスト

「AtCoder」解説一覧に戻る

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です