平均を求めてもうまくいかないので、中央値を求めたら通った。
めっちゃくちゃ悩んだわ!!
using System; using System.Linq; using System.IO; using System.Text; using System.Collections; using System.Collections.Generic; class Solution { static void Main(string[] args) { //中央値 int median; //ケーブルの長さ double l = 0; //ビルの数 int N = int.Parse(Console.ReadLine()); Position[] buildings = new Position[N]; //ビルの座標を取得 for (int i = 0; i < N; i++) { string[] inputs = Console.ReadLine().Split(' '); buildings[i] = new Position(int.Parse(inputs[0]), int.Parse(inputs[1])); } //Y軸昇順ソート Array.Sort(buildings, (order1, order2) => order1.Y.CompareTo(order2.Y)); //Y軸の中央値を得る median = buildings[N / 2].Y; //Console.Error.WriteLine(median); //X軸昇順ソート Array.Sort(buildings, (order1, order2) => order1.X.CompareTo(order2.X)); /* for (int i = 0; i < N; i++) { Console.Error.WriteLine("{0} {1}", buildings[i].X, buildings[i].Y); } */ //各ビルY軸の中央値からの差を全部足す for (int i = 0; i < N; i++) { int branch = (median - buildings[i].Y); branch = branch < 0 ? -branch : branch; l += branch; } //ビルのX方向の全長を足す l += (buildings[N - 1].X - buildings[0].X); Console.WriteLine(l); } public class Position { public int X = 0; public int Y = 0; public Position(int x, int y) { this.X = x; this.Y = y; } } }