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 JavaScript (judge verdict: Accepted)

var input = require('fs').readFileSync('/dev/stdin', 'utf8');
var arr = input.trim().split("\n");
var nmt = arr.shift().split(" ").map(Number);
var a = arr.shift().split(" ").map(Number);
a.length = nmt[0];
var m = nmt[1];
var t = nmt[2];
var sum = 0;
var iti = 0;
var i = 0;
while (i < t) {
   if (iti == 0) {
      if (a.length == 0) {
         //console.log("??????" + i);
         sum++;
         i++;
      } else if (i + m == a[0]) {
         //console.log("??????" + i);
         iti = 1;
         i += m;
         a.shift();
      } else {
         //console.log("??????" + i);
         sum++;
         i++;
      }
   } else if (iti == 1) {
      if (a.length == 0) {
         //console.log("??°???" + i);
         iti = 0;
         i += m;
      } else if (i + 2 * m < a[0]) {
         //console.log("??°???" + i);
         iti = 0;
         i += m;
      } else {
         //console.log("??????" + i);
         i = a[0];
         a.shift();
      }
   }
}
console.log(sum);