Made Up
Explicación
Como puede llegar hasta , tardaría demasiado iterar por todos los valores posibles de .
En su lugar, recorremos todos los valores posibles de y determinamos cuántos valores de pueden emparejarse con él. Para ello, necesitamos determinar cuántos elementos de son iguales a para todo . Esto se puede hacer con un mapa y un poco de precomputación.
Implementación
Complejidad temporal:
#include <iostream>
#include <map>
#include <vector>
using std::cout;
using std::endl;
using std::vector;
int main() {
int n;
std::cin >> n;
vector<int> a(n);
vector<int> b(n);
vector<int> c(n);
for (int &i : a) { std::cin >> i; }
for (int &i : b) { std::cin >> i; }
for (int &i : c) { std::cin >> i; }
// Guarda, para cada número de A, cuántas veces aparece en total
std::map<int, int> a_occ_num;
for (int i : a) { a_occ_num[i]++; }
/*
* Para cada valor posible de C_j,
* vemos cuántos valores de i son compatibles con él.
*/
long long valid_pairs = 0;
for (int cj : c) { valid_pairs += a_occ_num[b[cj - 1]]; }
cout << valid_pairs << endl;
}import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader read = new BufferedReader(new InputStreamReader(System.in));
read.readLine(); // n no se necesita
int[] a = Arrays.stream(read.readLine().split(" "))
.mapToInt(Integer::parseInt)
.toArray();
int[] b = Arrays.stream(read.readLine().split(" "))
.mapToInt(Integer::parseInt)
.toArray();
int[] c = Arrays.stream(read.readLine().split(" "))
.mapToInt(Integer::parseInt)
.toArray();
// Guarda, para cada número de A, cuántas veces aparece en total
Map<Integer, Integer> aOccNum = new HashMap<>();
for (int i : a) { aOccNum.put(i, aOccNum.getOrDefault(i, 0) + 1); }
/*
* Para cada valor posible de C_j,
* vemos cuántos valores de i son compatibles con él.
*/
long validPairs = 0;
for (int cj : c) { validPairs += aOccNum.getOrDefault(b[cj - 1], 0); }
System.out.println(validPairs);
}
}input() # n no se necesita
a = [int(i) for i in input().split()]
b = [int(i) for i in input().split()]
c = [int(i) for i in input().split()]
# Guarda, para cada número de A, cuántas veces aparece en total
occ_a_num = {}
for i in a:
if i not in occ_a_num:
occ_a_num[i] = 0
occ_a_num[i] += 1
valid_pairs = 0
"""
Para cada valor posible de C_j,
vemos cuántos valores de i son compatibles con él.
"""
for cj in c:
valid_pairs += occ_a_num.get(b[cj - 1], 0)
print(valid_pairs)