Problem:
MathJax.Hub.Config({ tex2jax: { inlineMath: [["$","$"], ["\\(","\\)"]], processEscapes: true }});

Distance II

Your task is to calculate the distance between two $n$ dimensional vectors $x = \{x_1, x_2, ..., x_n\}$ and $y = \{y_1, y_2, ..., y_n\}$.

The Minkowski's distance defined below is a metric which is a generalization of both the Manhattan distance and the Euclidean distance.

\[
D_{xy} = (\sum_{i=1}^n |x_i - y_i|^p)^{\frac{1}{p}}
\]

It can be the Manhattan distance

\[
D_{xy} = |x_1 - y_1| + |x_2 - y_2| + ... + |x_n - y_n|
\]

where $p = 1 $.

It can be the Euclidean distance

\[
D_{xy} = \sqrt{(|x_1 - y_1|)^{2} + (|x_2 - y_2|)^{2} + ... + (|x_n - y_n|)^{2}}
\]

where $p = 2 $.

Also, it can be the Chebyshev distance

\[
D_{xy} = max_{i=1}^n (|x_i - y_i|)
\]

where $p = \infty$

Write a program which reads two $n$ dimensional vectors $x$ and $y$, and calculates Minkowski's distance where $p = 1, 2, 3, \infty$ respectively.

Input

In the first line, an integer $n$ is given. In the second and third line, $x = \{x_1, x_2, ... x_n\}$ and $y = \{y_1, y_2, ... y_n\}$ are given respectively. The elements in $x$ and $y$ are given in integers.

Output

Print the distance where $p = 1, 2, 3$ and $\infty$ in a line respectively.
The output should not contain an absolute error greater than 10-5.

Constraints

$1 \leq n \leq 100$

$0 \leq x_i, y_i \leq 1000$

Sample Input

3
1 2 3
2 0 4

Sample Output

4.000000
2.449490
2.154435
2.000000

Solution in C# (judge verdict: Accepted)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Distance2
{
    class Program
    {
        static void Main(string[] args)
        {
            List<int> vectorX = new List<int>();
            List<int> vectorY = new List<int>();
            Console.ReadLine();

            string line = Console.ReadLine();
            string[] strs = line.Split(' ');
            foreach (string str in strs){
                vectorX.Add(int.Parse(str));
            }

            line = Console.ReadLine();
            strs = line.Split(' ');
            foreach (string str in strs)
            {
                vectorY.Add(int.Parse(str));
            }

            DistanceCalculator problem = new DistanceCalculator(vectorX, vectorY);

            Console.WriteLine(problem.GetDistance(1).ToString("F6"));
            Console.WriteLine(problem.GetDistance(2).ToString("F6"));
            Console.WriteLine(problem.GetDistance(3).ToString("F6"));
            Console.WriteLine(problem.GetChebyshevDistance().ToString("F6"));

        }
    }

    public class DistanceCalculator
    {
        private List<int> vectorX;
        private List<int> vectorY;

        public DistanceCalculator(List<int> vectorX, List<int> vectorY)
        {
            this.vectorX = vectorX;
            this.vectorY = vectorY;
        }

        public double GetDistance(int power)
        {
            double distance = 0;

            for (int i = 0; i < vectorX.Count; i++)
            {
                distance += Math.Pow(Math.Abs(vectorX[i] - vectorY[i]), power);
            }

            return Math.Pow(distance, (1.0 / power));
        }

        /// <summary>
        /// 2ベクトル間のチェビシェフ距離を取得する
        /// </summary>
        /// <returns>チェビシェフ距離</returns>
        public double GetChebyshevDistance()
        {
            double distance = 0;

            for (int i = 0; i < vectorX.Count; i++)
            {
                if (distance < Math.Abs(vectorX[i] - vectorY[i]))
                {
                    distance = Math.Abs(vectorX[i] - vectorY[i]);
                }
            }

            return distance;
        }

    }
}