はまやんはまやんはまやん

hamayanhamayan's blog

放課後 [いろはちゃんコンテスト Day1 E]

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;
}