Problem:
Problem C : War

A国とB国という２つの国が戦争をしている。A国の軍人であるあなたはn人の兵士を率いて、B国の領土を占領する事になった。

B国の領土は２次元グリッドで表されている。あなたが最初に占領する場所は二次元グリッド上のある１マスである。
あなたが率いている兵士たちは、それぞれh_iの体力を持っている。
それぞれの兵士は体力を1を消費して移動することができる。
現在いるマスを(a,b)とすると、(a+1,b),(a-1,b),(a,b+1),(a,b-1)の4方向を移動先として選ぶことが可能である。
兵士は体力が0になったらそこから動くことができなくなる。
一人以上の兵士が通過したマスはすべて占領することができる。

あなたの仕事は、最大でいくつのマスを占領することができるかを求めることである。

ただし、この２次元グリッドのサイズは無限に広いとすること。

Input

入力は以下のフォーマットで与えられる。

n
h1
.
.
.
hn

入力は以下の制約を満たす

1 ≤ n ≤ 500

1 ≤ hi ≤ 10,000,000

Output

答えの値を１行に出力せよ

Sample Input 1

2
5
5

Sample Output 1

11

Sample Input 2

10
10
10
10
10
10
10
10
10
10
10

Sample Output 2

93

Sample Input 3

5
1
2
3
4
5

Sample Output 3

15

Solution in Rust (judge verdict: Accepted)

use std::cmp;

fn main(){
  let n: usize = read();

  let mut vh: Vec<usize> = (0..n).map(|_| read()).collect();

  vh.sort();

  let mut ret: usize = 1;
  let mut i: usize = 0;
  
  for stp in 1 .. vh[n-1]+1 {
    while stp > vh[i] { i += 1; }
    ret += cmp::min(stp * 4, n - i);
  }

  println!("{:}", ret);
}

fn read<T>() -> T
  where T: std::str::FromStr,
        T::Err: std::fmt::Debug
{
  let mut buf = String::new();
  std::io::stdin().read_line(&mut buf).expect("failed to read");
  buf.trim().parse().unwrap()
}