Tenka1 Programmer Beginner Contest C - Align (python)
数列を並び替えて隣り合う2数の差の最大値を求める問題。
直観的に一番小さいものと一番大きいものが隣り合うように、出来るだけ真ん中に置くように並べるのがいいと予想できるが、単にそれを実装するのではなく、
隣り合う2数の差 = 大きいもので一回足す、小さいもので一回引く
と言い換えて結局大きいものから合計何回足すのか、小さいものから何回引くのか考えると簡単になる。数列の端以外は2回足したり、引いたりできるので、あとは偶奇で場合分けして端になるものの分だけ調節する。
import sys input = sys.stdin.readline n = int(input()) chk = [] for i in range(n): a = int(input()) chk.append(a) chk.sort() if n%2 == 0: l = [i*2 for i in chk[:n//2]] r = [i*2 for i in chk[n//2:]] print(sum(r)-sum(l)+chk[n//2-1]-chk[n//2]) else: l = [i*2 for i in chk[:(n-1)//2]] r = [i*2 for i in chk[(n-1)//2+1:]] p = sum(r)-sum(l)+chk[(n-1)//2-1]-chk[(n-1)//2] q = sum(r)-sum(l)+chk[(n-1)//2]-chk[(n-1)//2+1] print(max(p,q))