![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
passat |
![]()
Сообщение
#1
|
Новичок ![]() Группа: Пользователи Сообщений: 32 Пол: Мужской Репутация: ![]() ![]() ![]() |
В состязаниях участвуют N (N - до 100000) спортсменов. Каждому даются три попытки. Входной файл содержит 3 строки с положением участников в каждой попытке (ни в одной из попыток невозможно двум и более человекам разделить одно место).
Считается, что спортсмен A сильнее спортсмена B в случае, если A занял во всех попытках места выше, чем B. А является лучшим среди всех, если нет никого лучше его. Найти и вывести в выходной файл количество лучших спортсменов. Реализацию напишу сам, но подскажите алгоритм. Пока просматривается следующее. Поскольку раздел мест невозможен, то представляя лучшее и худшее место спортсмена во всех попытках как координаты отрезка, задача сводится к определению количества связных областей в начале координатной прямой. Т.е. реализация в самом общем виде что-то типа такого: - считать данные в массив, где каждому спортсмену отводится по 2 позиции: на первой лучшее место, на второй худшее место - с первой позицией связываем +1, со второй - -1 (можно использовать либо пару массивов, либо один, но с несколько более сложной структурой элементов - в принципе, это сейчас не интересует) - сортируем массив (второй - по результатам первого) - осталось посчитать сумму первых +/-1 до получения первого нуля. Количество +1 дает количество победителей. Особо смущает факт, что сортировка должна быть стабильной. А это сразу увеличивает время, особенно на больших количествах. Это наталкивает на грустную мысль, что само решение неверное. Подскажите, пожалуйста, правильный ли подход в принципе. Жаль тратить время на неправильное решение. |
![]() ![]() |
maksimla |
![]()
Сообщение
#2
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 324 Пол: Мужской Реальное имя: maksim Репутация: ![]() ![]() ![]() |
мне тогда кажется надо все серавно слапить три результата ну все результаты и потом смотреть наилутший результат тоесть наименьший и потом подсчитать сколько наименьших результатов и записать
-------------------- Учусь первый год на программиста в колледже. Учусь на втором курсе в школе программирования при научно-исследовательском институте математики и информатики.
|
passat |
![]()
Сообщение
#3
|
Новичок ![]() Группа: Пользователи Сообщений: 32 Пол: Мужской Репутация: ![]() ![]() ![]() |
Цитата мне тогда кажется надо все серавно слапить три результата ну все результаты и потом смотреть наилутший результат тоесть наименьший и потом подсчитать сколько наименьших результатов и записать Это было бы слишком просто. Непонятно, в чем смысл задачи. ![]() Выбор минимального (и подсчет) - тривиальная задача, выполняемая за линейное время. Единственный подводный камешек - опасность переполнения - обходится легким заведением дополнительного поля. Цитата По моему разумению, ответ к этим данным должен быть 0 - ибо каждый в какой-то попытке хуже других. Это уже вопрос вкуса. ![]() Как в том анекдоте: из двух спорсменов один обязательно будет вторым, а другой - предпоследним. ![]() Говорю, что не объясняет, т.к. единственный пример допускает толкование условия задачи как банального суммирования мест. |
![]() ![]() |
![]() |
Текстовая версия | 22.06.2025 3:08 |