競プロ典型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)
解説