[AtCoder] ABC 202 C – Made Up

問題

方針

\( A_i = x \) となる \( A_i \) の個数を \( D_x \) とし,\( B_{C_j} = y\) となる \( B_{C_j} \) の個数を \( E_y \) とします.このとき,\( A_i = B_{C_j} \) となる組み合わせの数は,\( D_{A_j}E_{A_j}\) と求めることができます.

コード

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

int main() {
    int N;
    cin >> N;
    int A[N], B[N], C[N];
    for (int i = 0; i < N; i++) {
        cin >> A[i];
    }
    for (int i = 0; i < N; i++) {
        cin >> B[i];
    }
    for (int i = 0; i < N; i++) {
        cin >> C[i];
    }
    int M = 100000;
    ll D[M] = {0};
    ll E[M] = {0};
    for (int i = 0; i < N; i++) {
        D[A[i] - 1]++;
        E[B[C[i] - 1] - 1]++;
    }
    ll ans = 0;
    for (int i = 0; i < M; i++) {
        ans += D[i] * E[i];
    }
    cout << ans << "\n";
    return 0;
}