using System; using System.Collections.Generic; using System.Linq; class Program { static string InputPattern = "InputX"; static List GetInputList() { var WillReturn = new List(); if (InputPattern == "Input1") { WillReturn.Add("5 8"); WillReturn.Add("1 3"); WillReturn.Add("4 5 5 7"); WillReturn.Add("5 1"); } else if (InputPattern == "Input2") { WillReturn.Add("200 200"); WillReturn.Add("1 1"); WillReturn.Add("1 2 200 200"); WillReturn.Add("200 1"); } else if (InputPattern == "Input3") { WillReturn.Add("1 1"); WillReturn.Add("1 1"); WillReturn.Add("1 1 1 1"); WillReturn.Add("1 1"); } else { string wkStr; while ((wkStr = Console.ReadLine()) != null) WillReturn.Add(wkStr); } return WillReturn; } static long[] GetSplitArr(string pStr) { return (pStr == "" ? new string[0] : pStr.Split(' ')).Select(pX => long.Parse(pX)).ToArray(); } static long mStaX; static long mStaY; static long mEndX; static long mEndY; static void Main() { List InputList = GetInputList(); long[] wkArr = GetSplitArr(InputList[1]); mStaX = wkArr[1]; mStaY = wkArr[0]; wkArr = GetSplitArr(InputList[2]); long RectY1 = wkArr[0]; long RectX1 = wkArr[1]; long RectY2 = wkArr[2]; long RectX2 = wkArr[3]; wkArr = GetSplitArr(InputList[3]); mEndX = wkArr[1]; mEndY = wkArr[0]; long Answer = long.MaxValue; for (long Y = RectY1; Y <= RectY2; Y++) { for (long X = RectX1; X <= RectX2; X++) { long CurrAnswer = 0; CurrAnswer += DeriveKyori(mStaX, mStaY, X, Y); CurrAnswer += DeriveKyori(mEndX, mEndY, X, Y); CurrAnswer += DeriveKyori(mEndX, mEndY, mStaX, mStaY); Answer = Math.Min(Answer, CurrAnswer); } } Console.WriteLine(Answer); } // 2つの座標のマンハッタン距離を返す static long DeriveKyori(long pX1, long pY1, long pX2, long pY2) { return Math.Abs(pX1 - pX2) + Math.Abs(pY1 - pY2); } }