ARC059A いっしょ

問題

https://atcoder.jp/contests/arc059/tasks/arc059_a

方針

解の候補が限られているため、全探索で解くことができる。

コード

1
2
3
4
5
6
7
8
N = int(input())
A = list(map(int, input().split()))
def calc(A,mu):v # 整数のリストと変換後の値の候補
return sum([(a-mu)**2 for a in A])
ans = 1e+8 # 無限大
for n in range(-100,201): # 解のパターン
ans = min(ans, calc(A,n))
print (ans)

別解

数学的に解くこともできる。
Aの平均を求め、その前後の整数が解となりうることがわかる。

1
2
3
4
5
6
7
8
9
from statistics import mean
import math
N = int(input())
A = list(map(int, input().split()))
def calc(A,mu): # 整数のリストと変換後の値の候補
return sum([(a-mu)**2 for a in A])
floor = math.floor(mean(A))
ceil = math.ceil(mean(A))
print (min(calc(A,floor),calc(A,ceil)))