![]() |
|
Модераторы: bsa |
![]()
|
|
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
нет нужды это делать. достаточно использовать алгоритм std::set_intersection (т.е. из двух множеств создать третье, которое содержит элементы, которые одновременно есть и в первом и во втором множестве). каждое множество - это набор слов-ассоциаций для объекта. т.к. множеств может быть больше двух
то все множества не нужно стравнивать. т.к. если после первой операции set_intersection новое множство будет пустое (ф-яe mpty()), то нет смысла продолжать дальнейший поиск (общих слов не будет, т.к. у "двух множество" уже не было). соответственно break делать из цикла. думаю, должно работать довольно быстро. сортировать(перемещать в памяти) не строки, а массив указателей на них. с помощью qsort. Это сообщение отредактировал(а) zim22 - 1.7.2009, 07:29 |
|||
|
||||
| Riddik |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 598 Регистрация: 2.12.2006 Репутация: нет Всего: нет |
Спасибо.
|
|||
|
||||
| kamre |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 330 Регистрация: 24.3.2006 Репутация: 2 Всего: 13 |
В общем я тут на stl намудрил и оно даже прошло (0.89 / 13 341 KB):
Похоже что очень не оптимально получилось у меня... Даже медленее простой Java версии с ее HashMap и HashSet, хотя памяти чуть поменьше используется. Как теперь этот код можно ускорить, оставаясь в рамках stl? |
|||
|
||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
намудрили так намудрили я вечером выложу свою версию кода. сейчас нет времени писать. где вы взяли тестовый файл? Это сообщение отредактировал(а) zim22 - 1.7.2009, 11:55 |
|||
|
||||
| kamre |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 330 Регистрация: 24.3.2006 Репутация: 2 Всего: 13 |
Ну я старался, чтобы было похоже на мою Java версию
Ждем-с, интересно сколько даст более правильное использование stl
Нигде не брал, это результаты с http://acm.timus.ru/status.aspx?space=1&am...status=accepted |
||||||
|
|||||||
| Riddik |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 598 Регистрация: 2.12.2006 Репутация: нет Всего: нет |
Как же там умудряются за 0.046 с. делать? На С++.
В моей версии памяти около 300 кб, но в тайм-лимит не укладывается. Причём, даже не узнать, насколько. Это сообщение отредактировал(а) Riddik - 1.7.2009, 13:05 |
|||
|
||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
сгенерируйте сами файл из 1000 записей. и время посчитайте |
|||
|
||||
| kamre |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 330 Регистрация: 24.3.2006 Репутация: 2 Всего: 13 |
Ну там же в задачке есть специальные ограничения на количество объектов, количество запросов и максимально возможную длину строки на входе. Так что вполне можно заоптимизировать под это дело. Впрочем, подождем решения от zim22, наверняка при правильном использовании stl можно раз в десять ускорить мой вариант |
|||
|
||||
| Riddik |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 598 Регистрация: 2.12.2006 Репутация: нет Всего: нет |
Немного в сторону, чтоб не создавать отдельную тему.
Даже с такой простой задачей у меня траблы. Укажите, пожалуйста, что не так делаю. Задача:
Мой код:
Пишет, что ответ не верный. Ссылка на задачу Это сообщение отредактировал(а) Riddik - 1.7.2009, 19:16 |
||||
|
|||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
создавайте, не стесняйтесь. |
|||
|
||||
| Riddik |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 598 Регистрация: 2.12.2006 Репутация: нет Всего: нет |
Так и сделал
|
|||
|
||||
| zim22 |
|
||||||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
я отстой
http://acm.timus.ru/status.aspx?space=1&am...p;status=failed вот мой код
Это сообщение отредактировал(а) zim22 - 1.7.2009, 21:50 |
||||||
|
|||||||
| Riddik |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 598 Регистрация: 2.12.2006 Репутация: нет Всего: нет |
Да ладно, уверенн, если б Вы этим занялись капитально, а не вечером после работы, было бы всё нормально.
Только по коду не пойму. Если объявляете пространство имён std видимым, зачем используете оператор разрешения области видимости к каждому идентификатору из std? А вообще по задаче, там среди лучших решений есть за четыре сотых секунды, причём на С++. Есть быстрые решения на чистом С, но самое быстрое на С++. Интересно, использовали ли ассемблер... Что ж там за код? Это сообщение отредактировал(а) Riddik - 1.7.2009, 22:37 |
|||
|
||||
| zim22 |
|
||||||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
я сначала без
весь код написал, но онлайн-компилятор начал ругаться, что функция getline не определена. мне лень было std:: приписать к ней *** я хотел добиться более быстрого выполнения кода за счёт того, что объявлял переменные вне циклов (т.е. чтобы они не создавались каждый раз). но я думаю основной тормоз был в фунции set_intersection, а именно то, что я выбрал тип set. думаю с векторами быстрее было бы.
может они алгоритм какой-то использовали или структуру данных хитрую. Это сообщение отредактировал(а) zim22 - 1.7.2009, 22:47 |
||||||
|
|||||||
| Riddik |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 598 Регистрация: 2.12.2006 Репутация: нет Всего: нет |
Забьёте или будете ещё решать?
Добавлено через 5 минут и 12 секунд У них там Интелловский компилятор, 7ой вроде бы. Дома бесполезно мерять время - у них будет другое, что у них за система (сервак) - не известно. Так вот, их компилятор ругался на ф-ию сортировки, я сначала в вектор записывал результат, потом сортировал:
Но с этой ф-ией не компилится, ругается, что не может преобразовать первый параметр в void*. |
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |