Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.01.2013, 14:42   #1
Nomicos
Пользователь
 
Регистрация: 16.12.2010
Сообщений: 18
По умолчанию Сравнение массивов

Всем привет.

Имеется задача, условие которой состоит в том, чтобы определить, являются ли два данных
на входе массива похожими (т.е. такими, которые образованы с использованием одних и тех же чисел).

Далее — оригинал условия, формата ввода/вывода и ограничений.

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

Формат входных данных

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

Формат выходных данных

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


Пример:

вход
3
1 7 9
4
9 7 7 1

выход
YES

Далее — код моей реализации сего на C++:

Код:
#include <iostream>

using namespace std;

int main() {
    
	bool r;

	int n; cin >> n; int *a = new int[n];
	for(int i = 0; i < n; i++) { cin >> *(a+i); }

	int m; cin >> m; int *b = new int[m];
	for(int i = 0; i < m; i++) { cin >> *(b+i); }

	for(int i = 0; i < n; i++) {

		r = false;

		for(int j = 0; j < m; j++) {

			if(*(a+i) == *(b+j)) { r = true; break; } }

		if(!r) { cout << "NO"; return 0; } }

	for(int i = 0; i < m; i++) {

		r = false;

		for(int j = 0; j < n; j++) {

			if(*(b+i) == *(a+j)) { r = true; break; } }

		if(!r) { cout << "NO"; return 0; } }

	cout << "YES";

    return 0;
}
Код проходит 44 из 50 тестов. На шести тестах Time limit exceed (1 sec).

Что посоветуете, дабы исправить? Заранее спасибо.

Последний раз редактировалось Nomicos; 23.01.2013 в 14:46.
Nomicos вне форума Ответить с цитированием
Старый 23.01.2013, 14:55   #2
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

на больших N сортировать оба массива
чтоб не искать полным перебором а с места последнего совпадения
и второй проход уберется сравнением последнего элемента a элементом на котором остановились из b
Не стесняемся, плюсуем!

Последний раз редактировалось Slym; 23.01.2013 в 15:04.
Slym вне форума Ответить с цитированием
Старый 24.01.2013, 11:05   #3
Nomicos
Пользователь
 
Регистрация: 16.12.2010
Сообщений: 18
По умолчанию

Slym, оптимизировал, программа прошла 50 из 50 тестов. Спасибо
Nomicos вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
сравнение массивов Gang182 Помощь студентам 7 29.09.2011 10:31
Delphi, сравнение массивов, умножение массивов Marjasja Помощь студентам 0 22.05.2011 19:59
Delphi, сравнение массивов, умножение массивов Marjasja Общие вопросы Delphi 0 22.05.2011 19:49
Сравнение двух массивов Рик Общие вопросы Delphi 3 07.04.2011 15:53
сравнение массивов nik1905 Microsoft Office Excel 3 13.12.2010 13:53