ルクの競プロ部屋

学生の競プロ生活を見たい人はどぞ

Yukicoder灰<No.24A>

問題

問題はこちら
問題文↓

4つの数を聞き、含まれていたらYES、でなければNOを返す数あてゲームをします
必ず数字が1つに定まる時、ある数は何かを出力してください

解法

YESのときは、聞いた数字4つ以外の数字を0にする
NOのときは、聞いた数字4つの数字を0にする
そうすると、必ずある数が0でなくなる(詳しく言うと、1または-1となる)ので、それを探す

#include <bits/stdc++.h>
using namespace std;
#define rep(i, n) for (ll i = 0; i < (n); ++i)
#define rep1(i, n) for (ll i = 1; i < (n); ++i)
#define rrep(i, n) for (ll i = n; i > 0; --i)
#define bitrep(i, n) for (ll i = 0; i < (1 << n); ++i)
#define all(a) (a).begin(), (a).end()
#define rall(a) (a).rbegin(), (a).rend()
#define yesNo(b) ((b) ? "Yes" : "No")
using ll = long long;
using ull = unsigned long long;
using ld = long double;
string alphabet = "abcdefghijklmnopqrstuvwxyz";
string ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
const double pi = 3.141592653589793;
int smallMOD = 998244353;
int bigMOD = 1000000007;

int main()
{
    int n;
    cin >> n;
    vector<int> A(10, -1);
    rep(i, n)
    {
        int a, b, c, d;
        string s;
        cin >> a >> b >> c >> d >> s;
        if (s == "YES")
        {
            rep(j, 10)
            {
                if (j != a && j != b && j != c && j != d)
                    A[j] = 0;
                else if (A[j] == -1)
                    A[j] = 1;
            }
        }
        else
        {
            A[a] = 0;
            A[b] = 0;
            A[c] = 0;
            A[d] = 0;
        }
    }
    int idx = 0;
    if (count(all(A), 1) == 0)
    {
        rep(i, 10)
        {
            if (A[i] == -1)
                idx = i;
        }
    }
    else
    {
        rep(i, 10)
        {
            if (A[i] == 1)
                idx = i;
        }
    }
    cout << idx << endl;
    return 0;
}