Задача на массивы

140
10 апреля 2022, 07:10

Задача C. Похожие массивы (Время: 1 сек. Память: 16 Мб Баллы: 100) Два массива называются похожими, если совпадают множества чисел, встречающихся в этих массивах.

Требуется написать программу, которая определит: похожи ли два заданных массива.

Входные данные Входной файл INPUT.TXT содержит в первой строке два числа M и N - длины массивов (1 ≤ M, N ≤ 16000). Во второй строке записаны M чисел – элементы первого массива. В третьей строке записаны N чисел – элементы второго массива. Числа в строках разделены пробелами, элементы массивов - целые числа, не превышающие 32000 по абсолютной величине.

Выходные данные Выходной файл OUTPUT.TXT должен содержать 1, если массивы похожи и 0 иначе.

int main()
{
int n, k;
cin >> n >> k;
int *p = new int[n];
int *b = new int[k];
for(int i = 0; i < n; i++)
    cin >> p[i];
for(int i = 0; i < k; i++)
    cin >> b[i];
bool f;
for(int i = 0; i < k; i++)
{
    f = (p[i] == b[i]);
}
if (f)
    cout << 1;
else
    cout << 0;
}

попробовал так решить не получилось

Answer 1

Так проще:

#include <iostream>
#include <set>
using namespace std;
int main()
{
    int M,N;
    set<int> a,b;
    cin >> M >> N;
    for(int x; M --> 0;)
    {
        cin >> x; a.insert(x);
    }
    for(int x; N --> 0;)
    {
        cin >> x; b.insert(x);
    }
    cout << (a == b) << endl;
}
Answer 2

В задании нет условия, что массивы должны быть упорядочены или их элементы должны быть уникальны. Если не пользоваться стандартными алгоритмами или контейнерами, то второй массив вовсе не нужен для вывода ответа, а нужно лишь сравнивать каждое вводимое число с элементами уже инициализированного массива.

int M, N;
std::cin >> M >> N;    
int* numbers = new int[M];
for (int i = 0; i < M; ++i)
    cin >> numbers[i];
bool b = true;
int n,  i = 0;
//сначала проверяем первое соответствие
while (cin >> n && (n != numbers[i++]) && i < M && i < N);
//проверяем соответствие остальных элементов
//если в диапазоне хоть один не соответствуе, то не похожи
for (int j = i; j < M && j < N; ++j) {
    cin >> n;
    if (n != numbers[j]) {
        b = false;
        break;
    }
}    
cout << b;
delete []numbers;
READ ALSO
Что означает запись using TasksInfo = map&lt;TaskStatus, int&gt;?

Что означает запись using TasksInfo = map<TaskStatus, int>?

Не могу найти нормальных примеров использование using наименование =

181
Как плавно проскролить страницу вниз до опреденного элемента?

Как плавно проскролить страницу вниз до опреденного элемента?

Есть у меня следующий код, который должен плавно скролить страницу вниз до опреденного элементаНо не могу понять, почему он не работает, где...

222
Может ли mysqldump сломать базу?

Может ли mysqldump сломать базу?

Появилась необходимость делать дампы MySQL базы не реже, чем раз в час (лучше - еще чаще)Планирую это делать через mysqldump, который будет запускаться...

173