Привет, мне нужно решить задачу, скажу сразу, решение через вложенный цикл использовать нельзя, так как он будет занимать много времени. Вот сама задача: Вы работаете в сфере безопасности, и вам сообщили о подозительной активности на серверах компании. А именно, у организации есть два сервера, и обычно пользователи подключаются только к одному из них. Более того, компания считает пользователя подозрительным, если он подключился сразу к обоим из них. Для простоты будем считать, что пользователя идентифицирует не ip, а просто число. Дано 2 списка чисел – идентификаторов людей для каждого сервера. Посчитайте кол-во различных подозрительных людей Более формально: Дано два массива, нужно найти количество различных чисел таких, что эти числа присутствуют в обоих массивах. Формат ввода В начале идет число N (1 ≤ N ≤ 105). На следующей строке идет N чисел – элементы первого массива. Все они не превосходят 104 В 3 строке идет число M (1 ≤ M ≤ 105) На следующей строке идет M чисел – элементы второго массива. Все они также не превосходят 104 Формат вывода Выведите одно число - количество различных чисел таких, что эти числа присутствуют в обоих массивах Пример 1 Ввод: 3 1 2 3 3 3 4 5 1 Вывод: 1 Пример 2 Ввод: 5 1 1 1 1 1 5 1 1 1 1 1 1 Вывод: 1
ChatGPT Дано два массива, нужно найти количество различных чисел таких, что эти числа присутствуют в обоих массивах. Формат ввода В начале идет число N (1 ≤ N ≤ 105). На следующей строке идет N чисел – элементы первого массива. Все они не превосходят 104 В 3 строке идет число M (1 ≤ M ≤ 105) На следующей строке идет M чисел – элементы второго массива. Все они также не превосходят 104 Формат вывода Выведите одно число - количество различных чисел таких, что эти числа присутствуют в обоих массивах Пример 1 Ввод: 3 1 2 3 3 3 4 5 1 Вывод: 1 Пример 2 Ввод: 5 1 1 1 1 1 5 1 1 1 1 1 1 Вывод: 1
Remon_4 Для решения этой задачи можно использовать структуры данных, которые позволяют быстро проверять наличие элемента и одновременно хранить только уникальные значения. Один из таких способов — использование множества (set) в C++. Множество автоматически удаляет дубликаты и позволяет быстро проверять присутствие элемента. Вот пример решения на C++: #include <iostream> #include <set> #include <vector> int main() { int N, M; std::cin >> N; std::vector<int> first(N); for (int i = 0; i < N; ++i) { std::cin >> first[i]; } std::cin >> M; std::vector<int> second(M); for (int i = 0; i < M; ++i) { std::cin >> second[i]; } std::set<int> firstSet(first.begin(), first.end()); std::set<int> secondSet(second.begin(), second.end()); int suspiciousCount = 0; for (int num : firstSet) { if (secondSet.find(num) != secondSet.end()) { suspiciousCount++; } } std::cout << suspiciousCount << std::endl; return 0; } CPP #include <iostream> #include <set> #include <vector> int main() { int N, M; std::cin >> N; std::vector<int> first(N); for (int i = 0; i < N; ++i) { std::cin >> first[i]; } std::cin >> M; std::vector<int> second(M); for (int i = 0; i < M; ++i) { std::cin >> second[i]; } std::set<int> firstSet(first.begin(), first.end()); std::set<int> secondSet(second.begin(), second.end()); int suspiciousCount = 0; for (int num : firstSet) { if (secondSet.find(num) != secondSet.end()) { suspiciousCount++; } } std::cout << suspiciousCount << std::endl; return 0; } В этом коде: 1. Считываем размеры и элементы двух массивов. 2. Преобразуем первый массив в множество `firstSet`, что автоматически убирает дубликаты. 3. Аналогично преобразуем второй массив в множество `secondSet`. 4. Итерируемся по элементам первого множества и проверяем, присутствуют ли они во втором множестве. 5. Считаем количество таких элементов и выводим результат. Этот подход работает значительно быстрее, чем вложенные циклы, особенно при больших размерах входных данных, благодаря тому, что операции вставки и поиска в множестве выполняются за логарифмическое время.