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?

atcoder練習(2024.11.15)

Posted at

キーワード

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文でも書けそうな気がする。
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?