バケットを活用する練習問題!
問題概要
AtCoder 王国には 家がある。どこかの家で順に 人の赤子が生まれた。
人目の赤子は家 で生まれ、性別は ('M' または 'F')であった。
各赤子が長男であるかどうかを判定せよ。
制約
考えたこと
人目の赤子が男の子であった場合、赤子 の生まれた家 で過去に男の子が生まれていたかどうかを知る必要があります。そこで、次の配列データを管理しておきましょう。
already[x]
:家 で男の子がすでに生まれたかどうか
初期状態では配列 alreday
全体を false に初期化しておきます。そして、赤子 が男の子であるとき、次のように処理すればよいでしょう。
already[A[i]]
= True であるとき:"No" を出力して何もしないalready[A[i]]
= False であるとき:"Yes" を出力して、already[A[i]]
を True にする
コード
#include <bits/stdc++.h> using namespace std; int main() { int N, M, A; char C; cin >> N >> M; vector<int> already(N + 1, false); for (int i = 0; i < M; i++) { cin >> A >> C; if (C == 'M' && !already[A]) { cout << "Yes" << endl; already[A] = true; } else { cout << "No" << endl; } } }