公式

B - Cutting Circle 解説 by keisuke6


\(a,b,c,d\) のいずれか 2 つが等しければ、明らかに答えは 3 です。以下、全てが互いに異なることと、 \(a < b, c < d, a < c\) であることとします。後者の言い換えに関しては一般性を失いません。

この条件の下では、 \(c < b\) かつ \(b < d\) であったら答えは 4 であり、そうでなければ答えは 3 です。 適切な場合分けにより \(O(1)\) で解くことができます。

#include <bits/stdc++.h>
using namespace std;

int main(){
    int N, A, B, C, D;
    cin >> N >> A >> B >> C >> D;
    if(A == B || A == C || A == D || B == C || B == D || C == D){
        cout << 3 << endl;
        return 0;
    }
    if(A > B) swap(A, B);
    if(C > D) swap(C, D);
    if(A > C){
        swap(A, C);
        swap(B, D);
    }
    if(C < B && B < D) cout << 4 << endl;
    else cout << 3 << endl;
}

投稿日時:
最終更新: