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

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

JOI 一次予選 2022 (第 1 回) D - 箱と鍵 (6Q, 難易度 3)

一見難しく見えるけど、実は単純な問題!

問題概要

整数  A_{1}, A_{2}, \dots, A_{N} の書かれた  N 個の宝箱と、整数  B_{1}, B_{2}, \dots, B_{M} の書かれた  N 個の鍵がある。

宝箱  i は整数  A_{i} が書かれた鍵を使うことで解錠できる。同じ鍵を使って複数の宝箱を解錠してもよい。

解錠できる宝箱の個数の最大値を求めよ。

制約

  •  1 \le N, M \le 100

考えたこと

問題文の理解が難しいかもしれない。要は次のことを問いかけているのだ。


各整数  A_{i} に対して、その値が数列  B_{1}, B_{2}, \dots, B_{M} の中に含まれるかどうかを判定し、含まれるものの個数を求めよ。


このように解釈できれば、あとは素直に実装すればよい。

コード

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

int main() {
    int N, M;
    cin >> N >> M;
    vector<int> A(N), B(M);
    for (int i = 0; i < N; ++i) cin >> A[i];
    for (int i = 0; i < M; ++i) cin >> B[i];

    int res = 0;
    for (int i = 0; i < N; ++i) {
        // A[i] が B の中にあるかどうかを判定する
        bool exist = false;
        for (int j = 0; j < M; ++j) {
            if (B[j] == A[i]) exist = true;
        }

        if (exist) ++res;
    }
    cout << res << endl;
}