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

B - 豪邸と宅配便

Problem Statement

太郎君は豪邸で一人暮らしをしている．
勉強好きの太郎君は，今日も邸内の書斎で勉強をするつもりである．
太郎君は，書斎以外の場所では集中できないので，勉強は必ず書斎で行う．

ところがこの日，太郎君宛の宅配便が $N$ 件届く．$i$ ($1 \leq i \leq N$) 番目の宅配便の届く時刻は $a_i$ である．
配達員を玄関先で待たせるのは心苦しいので，太郎君は宅配便の届く時刻には玄関にいることにした．
豪邸は広いので，書斎と玄関間の移動には片道 $M$ の時間がかかる．

一方で，太郎君はできるだけ長い時間勉強したいと思っている．
時刻 $0$ から時刻 $T$ までで，太郎君が書斎で勉強できる時間の最大値を求めよ．

なお，太郎君は時刻 $0$ には書斎にいて，時刻 $M$ より早く宅配便が届くことはなく，時刻 $T$ より遅く宅配便が届くこともない．
また，太郎君が宅配便を受け取るのにかかる時間は無視できる．

Input

各データセットは 2 行からなる．
1 行目は空白で区切られた 3 つの整数 $N, M, T$ からなる．
これらの整数は，$1 \leq N \leq 100$, $1 \leq M \leq 10{,}000$, $1 \leq T \leq 10{,}000$ を満たす．
2 行目は空白で区切られた $N$ 個の整数 $a_1, a_2, \dots, a_N$ からなる．
各 $a_i$ は $M \leq a_i \leq T$ を満たし，また $a_i < a_{ i + 1 }$ ($1 \leq i < N$) である．

Output

太郎君が勉強できる時間の最大値を表す整数を 1 行に出力せよ．

Sample Input 1

1 1 5
3

Output for the Sample Input 1

3

Sample Input 2

2 1 10
2 7

Output for the Sample Input 2

6

Sample Input 3

2 4 10
6 8

Output for the Sample Input 3

2

Solution in JAVA (judge verdict: Accepted)

import java.util.Scanner;

public class Main{
	public static void main(String args[]) {
		Scanner scn = new Scanner(System.in);
		int N, M, T;
		int a1, a2, delta = 0;
		N = scn.nextInt();
		M = scn.nextInt();
		T = scn.nextInt();
		a1 = scn.nextInt();
		for (int i = 1; i < N; i++) {
			a2 = scn.nextInt();
			delta += 2 * M > a2 - a1 ? 2 * M + a1 - a2 : 0;
			a1 = a2;
		}
		a2 = T+M;
		delta += 2 * M > a2 - a1 ? 2 * M + a1 - a2 : 0;
		scn.close();
		System.out.println(T + delta - 2*M*N);
	}
}