備忘録

徒然なるままに。

ABS088B

以前解いた問題について。
自分のコード

import numpy as np

Num = int(input())
list = list(map(int, input().split()))

new_list = sorted(list)

A = 0
B = 0

for j in range(Num):
    if j%2 == 0:
        A += new_list[j]
    else:
        B += new_list[j]

print(np.abs(A-B))

入力された数列をソートしたうえで二人に交互に割り振っていく(A,Bそれぞれに交互に加算していく)。
これまた愚直に書いたもの。以下は根本は同じ思考だがコードがきれい。

N = int(input())
a = sorted(list(map(int,input().split())),reverse = True)
# a.sort(reverse = True)
Alice = a[0::2]#スライスで検索
Bob = a[1::2]
print(sum(Alice)-sum(Bob))

Submission #39746168 - AtCoder Beginners Selectionより引用

数列をスライスして分割している。どうも自分は数列を扱うのに不慣れらしい。算数的発想を実現する上で数列操作を有用に使えるようになりたい。
ところで自分のコードでは最後にabsを用いている(何ならこのためだけにnumpyを持ってきている)訳だが、ソートして大小関係がはっきりするなら不要そうに見える。調子に乗ったな、過去の自分(苦笑)。