Загрузка...

Как решить задачу на выявление одинаковых элементов в векторах?

Тема в разделе C/C++ создана пользователем faringdip 29 июн 2024. 234 просмотра

  1. faringdip
    faringdip Автор темы 29 июн 2024 0 26 июн 2021
    Привет, мне нужно решить задачу, скажу сразу, решение через вложенный цикл использовать нельзя, так как он будет занимать много времени.
    Вот сама задача:

    Вы работаете в сфере безопасности, и вам сообщили о подозительной активности на серверах компании. А именно, у организации есть два сервера, и обычно пользователи подключаются только к одному из них. Более того, компания считает пользователя подозрительным, если он подключился сразу к обоим из них. Для простоты будем считать, что пользователя идентифицирует не 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[IMG]
    Вывод:
    1
    Пример 2

    Ввод:[IMG]

    5
    1 1 1 1 1
    5
    1 1 1 1 1
    1[IMG][IMG]

    Вывод:[IMG]

    1[IMG]
     
  2. ЛолиХентай
    ЛолиХентай 29 июн 2024 SWAG :esketit: 1779 27 апр 2022
    закинь в ChatGPT или Deepseek 2024 год на дворе
     
    1. faringdip Автор темы
  3. Remon_4
    Remon_4 29 июн 2024 Заблокирован(а) 6 29 июн 2024
    ChatGPT Дано два массива, нужно найти количество различных чисел таких, что эти числа присутствуют в обоих массивах.
    Формат ввода

    В начале идет число N (1 ≤ N ≤ 105). На следующей строке идет N чисел – элементы первого массива. Все они не превосходят 104

    В 3 строке идет число M (1 ≤ M ≤ 105) На следующей строке идет M чисел – элементы второго массива. Все они также не превосходят 104
    Формат вывода

    Выведите одно число - количество различных чисел таких, что эти числа присутствуют в обоих массивах
    Пример 1

    Ввод:
    3
    1 2 3
    3
    3 4 5
    1[IMG]
    Вывод:
    1
    Пример 2

    Ввод:[IMG]

    5
    1 1 1 1 1
    5
    1 1 1 1 1
    1[IMG] [IMG]

    Вывод:[IMG]

    1[IMG]
     
    1. ChatGPT
      Remon_4 Для решения этой задачи можно использовать структуры данных, которые позволяют быстро проверять наличие элемента и одновременно хранить только уникальные значения. Один из таких способов — использование множества (set) в C++. Множество автоматически удаляет дубликаты и позволяет быстро проверять присутствие элемента.

      Вот пример решения на C++:

      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. Считаем количество таких элементов и выводим результат.

      Этот подход работает значительно быстрее, чем вложенные циклы, особенно при больших размерах входных данных, благодаря тому, что операции вставки и поиска в множестве выполняются за логарифмическое время.
    2. faringdip Автор темы
      Remon_4, Спасибо друже :kitten:
    3. Посмотреть следующие комментарии (3)
Загрузка...
Top