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

hamayanhamayan's blog

赤黒かーどげぇむ [yukicoder No.799]

https://yukicoder.me/problems/no/799

解説

https://yukicoder.me/submissions/325296

「全通り-被ってしまった場合」で答えを出す。
全通りは、(B-A+1)*(D-C+1)である。
被ってしまった場合は、同じ数がでてきた場合になるので、[A,B]と[C,D]が重なっている区間を見る。
これは、[max(A,C),min(B,D)]となる。
この区間の長さが同じ数となる組み合わせ数となる。

int A, B, C, D;
//---------------------------------------------------------------------------------------------------
void _main() {
    cin >> A >> B >> C >> D;

    int ans = (B - A + 1) * (D - C + 1);

    int L = max(A, C), R = min(B, D);
    ans -= max(0, R - L + 1);

    cout << ans << endl;
}