https://atcoder.jp/contests/iroha2019-day1/tasks/iroha2019_day1_e
解説
https://atcoder.jp/contests/iroha2019-day1/submissions/5195243
デートを行う記念日には競プロはできないので、記念日間でできる日数を数える。
各記念日間では独立に考えることができる。
(一旦デートしたら状況はリセットされるので)
記念日と記念日の間がlen日間あるとき、最低限デートすべき日数はlen/A日になる。
そして、それ以外は競プロできるということなので、最大日数はlen-len/Aとなる。
全ての区間と端の区間でそれを計算して、総和を取ると答え。
ll N, A, B, D[201010]; //--------------------------------------------------------------------------------------------------- void _main() { cin >> N >> A >> B; rep(i, 0, B) cin >> D[i]; sort(D, D + B); ll ans = 0; rep(i, 0, B) { ll L = 0; if (i) L = D[i - 1]; ll R = D[i]; ll len = R - L - 1; ans += len - len / A; } ll L = D[B - 1]; ll R = N + 1; ll len = R - L - 1; ans += len - len / A; cout << ans << endl; }