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

Задача 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;
}

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


Ответы (2 шт):

Автор решения: Harry

Так проще:

#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;
}
→ Ссылка
Автор решения: AR Hovsepyan

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

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;
→ Ссылка