AtCoder Beggineres Selection、問7 ABC088B – Card Game for Two です
問題文
N 枚のカードがあります.i 枚目のカードには ai という数が書かれています.
Alice と Bob は, これらのカードを使ってゲームを行います. ゲームでは, Alice と Bob が交互に 1 枚ずつカードを取っていきます. Alice が先にカードを取ります.
2人がすべてのカードを取ったときゲームは終了し, 取ったカードの数の合計がその人の得点になります. 2人とも自分の得点を最大化するように最適な戦略を取った時, Alice は Bob より何点多く取るか求めてください.
制約
N は1以上100 以下の整数
ai(1≤i≤N) は1以上100 以下の整数
入力は以下の形式で標準入力から与えられる.
N
a1 a2 a3 … aN
出力
両者が最適な戦略を取った時, Alice は Bob より何点多く取るかを出力してください.
aiを大きい順に並べ替えて、Alice と Bob が大きいほうから取る = 大きい順に足して引いてを繰り返せば良さそう。
と思って書いたコード
N = int(input())
a = input().split()
a.sort(reverse=True)
point = 0
for i in range(0, N, 2):
point = point + int(a[i])
if (i + 1) < N:
point = point - int(a[i + 1])
print(point)
入力例1~3が通ったので提出。
AC が6、 WA が6でした。
上のコードだと str 型のまま sort するから
元データが 20 3 74 101 だとソートしたものは 74 3 20 101 になるのね。
修正版。ソート前に int にしました。
N = int(input())
a = list(map(int, input().split()))
a.sort(reverse=True)
point = 0
for i in range(0, N, 2):
point = point + a[i]
if (i + 1) < N:
point = point - a[i + 1]
print(point)
すべて AC になりました。


コメント