ARC073C Sentou
int main() { cout <<setprecision(10); ll N , T ; cin >> N >> T; vector<ll> time(N); rep(i,N) cin >> time[i]; ll ans = 0; ll clock = 0 ; rep(i,N){ ans += time[i] + T - max(clock,time[i]); clock = time[i]+T; } cout << ans << endl; }
解法
(最近精進してなくてどうやって書けばいいか思い出せねえ)
水が止まってから次の人がボタンを押してくれると、水の流れる時間は長くなる
N人までの人iに対して、
ボタンを押して水が止まる時間をclock変数に入れておく(初期値は0)
すると、i+1人目が来たときに、
- clockよりもtime[i]が小さければ止まる前にボタンを押すことになる。
このときi+1人が押したことによって流れる水の時間はtime[i]+T - clock;
- clockがt[i]よりも小さければ、水が止まってからi+1人目がボタンを押すことになるので
i+1人目が押したことによって流れる水の時間はT + time[i+1] - time [i+1]つまり T
これらを二つ合わせると
ans += time[i] + T - max(clock , time[i])
となる
そしてclock をtime[i] + T に変更すればいい
説明のところちょっとi+1がバラバラになっててごめん