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

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

JOI 一次予選 2021 (第 3 回) C - 比較 (7Q, 難易度 2)

多重 for 文に慣れよう!

問題概要

長さ  N の数列  A_{1}, A_{2}, \dots, A_{N} と、長さ  M の数列  B_{1}, B_{2}, \dots, B_{M} が与えられる。

  •  A_{i} \le B_{j}
  •  1 \le i \le N
  •  1 \le j \le M

を満たす整数の組  (i, j) の個数を求めよ。

制約

  •  1 \le N, M \le 100

解法

多重 for 文に慣れましょう!

数列  A_{1}, A_{2}, \dots, A_{N} i 番目と、数列  B_{1}, B_{2}, \dots, B_{M} j 番目をすべて調べるのは、次のような 2 重の for 文で記述できます。

for (int i = 0; i < N; ++i) {
    for (Int j = 0; j < M; ++j) {
        // A[i] と B[j] について考える

    }
}

これを元に、A[i] <= B[j] となる  (i, j) の個数を数えます。

コード

#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) {
        for (int j = 0; j < M; ++j) {
            if (A[i] <= B[j]) ++res;
        }
    }
    cout << res << endl;
}