チンチラのフンみたいなもの

毎日の学んだことを書いていきます

競プロ典型90問 014 - We Used to Sing a Song Together(★3)

問題はコチラから

問題文

AGC 街道には N 人の小学生が住んでおり、小学生 i (1≤i≤N) の家は位置 A iにあります。また、小学校は N 校建てられており、小学校 j (1≤j≤N) は位置 Bj にあります。AGC 街道に住む小学生は性格が悪く、どの人同士も険悪な関係になっているため、全員が別の学校に通うようにしたいです。また、不便さは次のように定義されます。
・小学生 i にとっての家から学校までの距離を Eiとするとき、不便さは距離の総和、すなわち E1+E2+...+ENである。
・ただし、位置 u から位置 v までの距離は ∣u−v∣ どの生徒も別の学校に通うという条件下における、不便さとして考えられる最小値を求めてください。

制約

  • 1≤N≤100000
  • 0≤Ai≤109
  • 0≤Ai≤109
  • A1,A2,…,ANは相異なる
  • B1,B2 ,…,BNは相異なる
  • 入力はすべて整数

私のコード

これはあんまり考えることがなかった。解説でより理解が深まった。

let a = Int(readLine()!)!
var st = readLine()!.split(separator: " ").map{Int($0)!}
var sc = readLine()!.split(separator: " ").map{Int($0)!}
st.sort{$0 < $1}
sc.sort{$0 < $1}
var result = 0
for i in 0 ..< a{
    result += abs(st[i] - sc[i])
}
print(result)

他の人のコード

func readInt() -> Int {
    Int(readLine()!)!
}

func readIntArray() -> [Int] {
    readLine()!.split(separator: " ").map { Int(String($0))! }
}

let n = readInt()
let a = readIntArray().sorted(by: <)
let b = readIntArray().sorted(by: <)
var sum = 0
for i in 0..<n {
    sum += abs(a[i] - b[i])
}
print(sum)

解説