けんちょんの競プロ精進記録

競プロの精進記録や小ネタを書いていきます

AtCoder ABC 263 A - Full House (6Q, 灰色, 100 点)

この手の問題は最初にソートすると考えやすいことが多い。

問題概要

5 枚のカードには数  A, B, C, D, E が書かれている。これがフルハウスであるかを判定せよ。

なお、5 つの数がフルハウスであるとは、同じ数が書かれたカード 3 枚と、別の同じ数が書かれたカード 2 枚からなることをいう。

解法

5 つの数からなる配列を  A として、ソートし、小さい順に  A_{0}, A_{1}, A_{2}, A_{3}, A_{4} としよう。このとき、フルハウスであるのは次の 2 パターンがある。


  •  A_{0} = A_{1} = A_{2} \lt A_{3} = A_{4}
  •  A_{0} = A_{1} \lt A_{2} = A_{3} = A_{4}

これらを満たすかを判定すればよいこととなる。

コード

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

int main() {
    vector<int> A(5);
    for (int i = 0; i < 5; ++i) cin >> A[i];
    sort(A.begin(), A.end());

    if (A[0] == A[1] && A[1] == A[2] && A[2] < A[3] && A[3] == A[4])
        cout << "Yes" << endl;
    else if (A[0] == A[1] && A[1] < A[2] && A[2] == A[3] && A[3] == A[4])
        cout << "Yes" << endl;
    else
        cout << "No" << endl;
}