codefestival final C Time Gap

問題

コード (2WA間違いコード)

int N;

int pot(int a,int b){
    return ((a*b)?max(abs(a-b),abs(24 - a - b)):max(a,b));
}

int main(){
    //cout.precision(10);
    cin.tie(0);
    ios::sync_with_stdio(false);

    cin >> N;

    vector<int> d(N+1,0);
    vector<int> ct(13); //カウント用
    ct[0] = 1;
    REP(i,N){
        cin >> d[i]; //0:高橋くん,1~N:参加者
        ct[d[i]]++;
        if(ct[d[i]]==3){
            cout << 0 << endl;
            return 0;
        }
    }

    int ans = 12;

    for(int i = 0;i < N;i++){
        for(int j = i+1;j <= N;j++){
            int tmp = pot(d[i],d[j]);
            chmin(ans,tmp);
        } 
    }

    cout << ans << endl;
}

自分の方針

d[i] d[j] が与えられた時、その二人の時差の最小値の最大値を返す関数 pot を作って、それをN+1人に対し計算し、その最小値を出力した。 しかしこれでは例えば、高橋くんとの時差 t に 一人しかいないときでも、t24-t に両方いるようにみなしてしまっているので、誤りだった。 解説では、3つ以上同じ d[i] がきたら0を出力し、そうでないときは、一人なら t24-t のそれぞれ2通りに置いてためす、二人なら両方に配置するといいと書いてあった。 考察不足...。