Похожие массивы

Похожие массивы

Назовём два массива похожими, если они состоят из одних и тех же элементов (без учёта кратности). По двум данным массивам выясните, похожие они или нет.

Входные данные

В первой строке содержится число N(1≤N≤100000) — размер первого массива. Во второй строке идут N целых чисел, не превосходящих по модулю 109, — элементы массива. Далее аналогично задаётся второй массив.

Выходные данные

Программа должна вывести слово YES, если массивы похожи, и слово NO в противном случае.

Примеры

Ввод 1

3

1 7 9

4

9 7 7 1

Вывод

YES

Следующий c++-код получает неверный ответ на некоторых тестах:

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main()
{
    long long n, m;
    cin >> n;
    vector<int> arra;
    for(long long i=0; i<n; ++i){
        long long el;
        cin >> el;
        arra.push_back(el);
    }
    cin >> m;
    vector<int> arrb;
    for(long long i=0; i<m; ++i){
        long long el;
        cin >> el;
        arrb.push_back(el);
    }
    if(n>m){
        long long temp=m;
        m=n;
        n=temp;
        vector<int> arrtemp=arra;
        arra=arrb;
        arrb=arrtemp;
    }
    long long j=0;
    sort(arra.begin(), arra.end());
    sort(arrb.begin(), arrb.end());
    for(long long i=0; i<n; ++i){
        while(arrb[j]<arra[i]){
            ++j;
        }
        if(arra[i]!=arrb[j]){
            cout << "NO";
            return 0;
        }
        else{
            ++j;
        }
    }
    cout << "YES";
    return 0;
}

Долго пытаюсь понять, в чём проблема.

Подскажите, пожалуйста, в чём ошибка?


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

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

Раз у вас С++, почему бы не воспользоваться стандартными средствами?

int main()
{
    set<int> a,b;
    size_t n;
    cin >> n;
    copy_n(istream_iterator<int>(cin),n,inserter(a,a.end()));
    cin >> n;
    copy_n(istream_iterator<int>(cin),n,inserter(b,b.end()));
    cout << ((a==b)? "YES" : "NO") << endl;
}
→ Ссылка
Автор решения: llilrain

python-решение:

MAX=1000000000
n=int(input())
a={MAX+1}
arra=[int(i) for i in input().split()]
for i in arra:
    a.add(i)
a.remove(MAX+1)
m=int(input())
b={MAX+1}
arrb=[int(i) for i in input().split()]
for i in arrb:
    b.add(i)
b.remove(MAX+1)
if(len(a)>len(b)):
    a, b=b, a
if(a<=b):
    print("YES")
else:
    print("NO")

Только не проходит несколько тестов, может, кто-то знает, какие?

→ Ссылка
Автор решения: Альфия Карымова

Простое решение, все тесты прошло:

input()
l = list(map(int, input().split()))
input()
l2 = list(map(int, input().split()))
if set(sorted(l)) == set(sorted(l2)):
    print("YES")
else:
    print("NO")
→ Ссылка