問題概要
$N$個の料理がある.
料理$i$を食べると, 高橋くんは幸福度$A_i$を, 青木さんは幸福度$B_i$を得る.
それぞれ(最終的に自分が得る幸福度の総和) - (最終的に相手が得る幸福度の総和)
を最大化するように動く.
このとき, (最終的に高橋くんが得る幸福度の総和) - (最終的に青木さんが得る幸福度の総和)
を求めなさい.
制約
- $1 \leq N \leq 10^5$
- $1 \leq A_i \leq 10^9$
- $1 \leq B_i \leq 10^9$
考察
高橋くんがどのような優先順位で皿を取るべきかを考える.
$(A_1, B_1)$の皿 1 と, $(A_2, B_2)$の皿 2 について
- 皿 1 → 皿 2 の順に取るとき : $A_1 - B_2$分の優位を得る.
- 皿 2 → 皿 1 の順に取るとき : $A_2 - B_1$分の優位を得る.
前者の方が取るべきであるとき, $A_1 - B_2 > A_2 - B_1$, すなわち$A_1 + B_1 > A_2 + B_2$であることが分かった.
同様の議論を青木さん側でも行え, 同様の結果が得られる.
よって, $A_i + B_i$の値によってソートすればよい.
提出コード(Python🐍)
res = 0
n = int(input())
l = []
for i in range(n):
a, b = map(int,input().split())
l.append([a + b, a, b])
l = sorted(l)[::-1]
for i in range(n):
if i % 2 == 0:
res += l[i][1]
else:
res -= l[i][2]
print(res)