Problem:
集会所

　

イヅア村の住民は村に集会所を建てることにしました。この村では東西に一直線に伸びる道路に沿って建物を建てられる地点が決まっています。最も西の地点を０番目の地点として、そこから等間隔に東に向かって１番目、２番目、…と地点番号が与えられています。村人の家と集会所を建てることができるのは、これらの地点だけです。各家には１人以上の村人が住んでいます。どの村人も隣の地点まで１分間で移動できます。

集会を開くのに便利なように、ある時刻に一斉に全ての村人が自分の家から集会所に向かったとき、全員が集まるのに必要な時間が最小になるような場所に、集会所を建てることにしました。

家の建っている地点の番号が与えられたときに、全ての村人が集会所に集まるのに必要な時間の最小値を計算するプログラムを作成せよ。ただし、集会所の地点番号が家の地点番号と重複してもよいものとする。

入力

入力は以下の形式で与えられる。

$N$
$x_1$ $x_2$ ... $x_N$

１行目に家の数$N$ ($1 \leq N \leq 1000$)が与えられる。２行目に家の建っている地点番号$x_i$ ($0 \leq x_i \leq 2000$)が与えられる。ただし、家の地点番号は全て異なる($i \ne j$について$x_i \ne x_j$である)。

出力

集会所に集まるのに必要な最小の時間を分単位で１行に出力する。

入出力例

入力例１

3
4 0 1

出力例１

2

入力例２

2
1 2

出力例２

1

Solution in JAVA (judge verdict: Accepted)



import java.io.*;
import java.util.*;

public class Main {

    public static void main(String[] args) throws Exception {
        FastScanner sc = new FastScanner(System.in);
        PrintWriter out = new PrintWriter(System.out);
        int n = sc.nextInt();
        int[] adresses= new int[n];
        for(int i=0; i<n; i++) adresses[i] = sc.nextInt();
        Arrays.sort(adresses);
        int dif = (adresses[n - 1] - adresses[0]);
        int ans = 0;
        if(dif % 2 == 0) ans = dif /2;
        else ans = dif / 2 + 1;
        out.println(ans);
        out.flush();

    }

    static class FastScanner {
        private BufferedReader reader = null;
        private StringTokenizer tokenizer = null;

        public FastScanner(InputStream in) {
            reader = new BufferedReader(new InputStreamReader(in));
            tokenizer = null;
        }

        public String next() {
            if (tokenizer == null || !tokenizer.hasMoreTokens()) {
                try {
                    tokenizer = new StringTokenizer(reader.readLine());
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
            return tokenizer.nextToken();
        }

        public String nextLine() {
            if (tokenizer == null || !tokenizer.hasMoreTokens()) {
                try {
                    return reader.readLine();
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }

            return tokenizer.nextToken("\n");
        }

        public long nextLong() {
            return Long.parseLong(next());
        }

        public int nextInt() {
            return Integer.parseInt(next());
        }

    }
}