ABC060C

――――――――――――――――――――――――
問題文
とある銭湯には、スイッチを押すT秒間お湯が出るシャワーがあります。
なお、お湯が出ているときにスイッチを押すと、そのタイミングからT 秒間お湯が出つづけます。 お湯の出る時間がT 秒間延長されるわけではないことに注意してください。
このシャワーの前をN 人の人がスイッチを押して通り過ぎていきます。i 人目の人は、1 人目の人がスイッチを押したti 秒後にスイッチを押します。
お湯が出る時間の総和は何秒かを求めてください。
制約
• 1≦N≦200,000
• 1≦T≦10^9
• 0=t1<t2<t3<,...,<tN−1<tN≦109
• T,ti はすべて整数である

入力
入力は以下の形式で標準入力から与えられる。
N T
t1 t2 ... tN
出力
お湯が出る時間の総和を X 秒としてX を出力する。
――――――――――――――――――――――――

考え方

i番目の人が通過するタイミングで、これまで何秒お湯が出ていたかを調べていく。
①i-1番目の人が通過してから、i番目の人が通るまでの時間を配列t2に格納。
②i番目の人が通るときに、i-1番目からT秒経過しているかどうかを判定。
→T秒経過している:XにTをプラス。
→T秒経過していない:Xにt2をプラス。
※これで、i番目の人が通過するまでに何秒お湯がでていたかになる。
③N番目の人が通ってから、さらにT秒お湯が出るから、Tを足す。

using System;
using System.Collections.Generic;
using System.Linq;
using static System.Math;

class Program{
 public static void Main(){

   var input = Console.ReadLine().Split();
   int N = int.Parse(input[0]);
   int T = int.Parse(input[1]);
   var input2 = Console.ReadLine().Split();
   int[] t = new int[N];
   for(int i=0; i<N; i++){
     t[i] = int.Parse(input2[i]);
   }
   int[] t2 = new int[N];
   t2[0] = t[0];
   for(int i=1; i<N; i++){
     t2[i] = t[i]-t[i-1];
   }
   
   long x = 0;
   for(int i=0; i<N; i++){
     if(t2[i] > T){
       x += T;
     }
     else{
       x += t2[i];
     }
   }
   x += T;
   Console.WriteLine(total);
   }
}

t2の配列を作っているところとか、最後にTを足しているのが美しくない気がする。t2はもともと与えられている配列tの差をそのまま使えばよかったし、最後にTを足すのは、xの初期値をTで与えておいて、最後の人からカウントしてもよかったかもしれない。最後の人から数えても、最初の人から数えても結果は同じだけど。