今回は、AtCoder Beginner Contest 088Bを解いていきたいと思います。
N枚のカードがあります. i枚目のカードには, aiという数が書かれています.
Alice と Bob は, これらのカードを使ってゲームを行います. ゲームでは, Alice と Bob が交互に 1 枚ずつカードを取っていきます. Alice が先にカードを取ります.
2 人がすべてのカードを取ったときゲームは終了し, 取ったカードの数の合計がその人の得点になります. 2 人とも自分の得点を最大化するように最適な戦略を取った時, Alice は Bob より何点多く取るか求めてください.
%2
表現してAliceとBobの番を表現(max)
を使い最大値を取得しAliceまたはBobに加算remove
を用いて配列から最大値を除去N=int(input())
A=list(map(int,input().split()))
Alice=0
Bob=0
n=1
while n<=N:
if n%2==1:
Alice=Alice+max(A)
A.remove(max(A))
n=n+1
else:
Bob=Bob+max(A)
A.remove(max(A))
n=n+1
print(Alice-Bob)
🐍やや冗長やけど書くとこんな感じになった。
AC!
🐍やったで。
N = int(input())
a = sorted(list(map(int, input().split())), reverse=True)
alice = sum(a[0::2])
bob = sum(a[1::2])
print(abs(alice - bob))
🐍
reverse=True
で配列を逆にして、リストのstep
を2
にしてsum()
で合計値を出しているんやな。
第4回 | AtCoder Beginner Contest 073CをPythonで解く |
第5回 | AtCoder Beginner Contest 095CをPythonで解く |
第6回 | AtCoder Beginner Contest 088BをPythonで解く |
第7回 | AtCoder Beginner Contest 087CをPythonで解く |
第8回 | AtCoder Beginner Contest 044AをPythonで解く |
Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。
また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!
こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?
コメント