Похожие массивы
Похожие массивы
Назовём два массива похожими, если они состоят из одних и тех же элементов (без учёта кратности). По двум данным массивам выясните, похожие они или нет.
Входные данные
В первой строке содержится число 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 шт):
Раз у вас С++, почему бы не воспользоваться стандартными средствами?
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;
}
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")