公式
D - 気温の統一 / Uniform Temperature 解説
by
D - 気温の統一 / Uniform Temperature 解説
by
sounansya
\(\displaystyle f(T)=\sum_{i=1}^NS_i\times |T-P_i|\) とします。\(f(T)\) の最小値を求めれば良いです。
\(f(T)\) は \(T=P_1,P_2,\ldots,P_N\) のいずれかで最小値を取ります。また、\((P_i,S_i)\) を \(P\) の昇順にソートすると、\(\displaystyle f(P_k)=\sum_{i=1}^NS_i\times |P_k-P_i|=\sum_{i=1}^{k-1}S_i\times (P_k-P_i)+\sum_{i=k}^NS_i\times (P_k-P_i)\) となり、これは事前に累積和を計算することで \(O(1)\) で計算できます。
以上を適切に実装することでこの問題に正答することができます。
n = int(input())
a = []
sum_s, sum_ps = 0, 0
for i in range(n):
s, p = map(int, input().split())
a.append((p, s))
sum_s += s
sum_ps += p * s
a.sort()
ans = 9 * 10**18
now_s, now_ps = 0, 0
for i in range(n):
ans = min(ans, 2 * a[i][0] * now_s - 2 * now_ps + sum_ps - a[i][0] * sum_s)
now_s += a[i][1]
now_ps += a[i][0] * a[i][1]
print(ans)
投稿日時:
最終更新:
