キーワード
while,
問題
N 枚のカードがあります.
i 枚目のカードには,
a
i
という数が書かれています.
Alice と Bob は, これらのカードを使ってゲームを行います. ゲームでは, Alice と Bob が交互に 1 枚ずつカードを取っていきます. Alice が先にカードを取ります.
2 人がすべてのカードを取ったときゲームは終了し, 取ったカードの数の合計がその人の得点になります. 2 人とも自分の得点を最大化するように最適な戦略を取った時, Alice は Bob より何点多く取るか求めてください.
制約
N は
1 以上
100 以下の整数
a
i
(1≤i≤N) は
1 以上
100 以下の整数
入力
入力は以下の形式で標準入力から与えられる.
N
a
1
a
2
a
3
...
a
N
出力
両者が最適な戦略を取った時, Alice は Bob より何点多く取るかを出力してください.
入力例 1
Copy
2
3 1
出力例 1
Copy
2
最初, Alice は
3 が書かれたカードを取ります. 次に, Bob は
1 が書かれたカードを取ります. 得点差は
3 -
1 =
2 となります.
入力例 2
Copy
3
2 7 4
出力例 2
Copy
5
最初, Alice は
7 が書かれたカードを取ります. 次に, Bob は
4 が書かれたカードを取ります. 最後に, Alice は
2 が書かれたカードを取ります. 得点差は,
7 -
4 +
2 =
5 点となります.
入力例 3
Copy
4
20 18 2 18
出力例 3
Copy
18
回答
N = int(input())
A = list(map(int, input().split()))
Alice = 0
Bob = 0
while len(A) != 0:
Alice += max(A)
A.remove(max(A))
Bob += max(A)
A.remove(max(A))
if len(A) == 1:
Alice += max(A)
A.remove(max(A))
print(Alice - Bob)
参考
備考
- whileだと奇数の時にちょっとおかしなことになる。せっかくNがあるからfor文で書いた方がいいような気もするなって、書き換えようと思ったけど、よくよく考えれば、その時に対応したコードに編集すればいっかて思ってif文を追加した。
- でもfor文でも書けそうな気がする。