算法
(暴力枚举、数学) $O(n)$
记 $A_i = B_{C_j} = x$,注意到这三个数组的范围都是 $1 \sim N$,所以我们可以先开一个桶用来记录数组 A
中每个数的出现次数 $cnt_x$,然后遍历数组 C
,把 $B_{C_j}$ 的出现次数加进答案里。
C++ 代码
#include <bits/stdc++.h>
#define rep(i, n) for (int i = 0; i < (n); ++i)
using std::cin;
using std::cout;
using std::vector;
using ll = long long;
int main() {
int n;
cin >> n;
vector<int> a(n), b(n), c(n);
rep(i, n) cin >> a[i];
rep(i, n) cin >> b[i];
rep(i, n) cin >> c[i];
vector<int> cnt(n + 1);
rep(i, n) cnt[a[i]]++;
ll ans = 0;
rep(j, n) ans += cnt[b[c[j] - 1]];
cout << ans << '\n';
return 0;
}