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

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

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

いろんな解法が考えられる。

問題概要

4 枚のカードがあって、それぞれのカードには整数  A,B,C,D が書かれている。

ここに 1 枚カードを加え、フルハウスとできるか判定せよ。

制約

  •  1 \le A, B, C, D \le 13

考えたこと

色んな解法が考えられるが、この手のものは「ソート」が一例ではある。4 枚のカードの数値を小さい順に  a, b, c, d としたとき、「あと 1 枚でフルハウス」である条件は、

  •  a \lt b = c = d
  •  a = b \lt c = d
  •  a = b = c \lt d

のいずれかが成り立つことである。ソートして、これらが成り立つかどうかを判定していけばよい。

コード

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

int main() {
    vector<int> v(4);
    for (int i = 0; i < 4; i++) cin >> v[i];
    sort(v.begin(), v.end());
    if (v[0] < v[1] && v[1] == v[2] && v[2] == v[3])
        cout << "Yes" << endl;
    else if (v[0] == v[1] && v[1] < v[2] && v[2] == v[3])
        cout << "Yes" << endl;
    else if (v[0] == v[1] && v[1] == v[2] && v[2] < v[3])
        cout << "Yes" << endl;
    else
        cout << "No" << endl;
}